wechat_client_test.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package gopay
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "encoding/json"
  6. "fmt"
  7. "strings"
  8. "testing"
  9. )
  10. func TestMd5(t *testing.T) {
  11. st := "appid=wxdaa2ab9ef87b5497&nonceStr=9k20rM66parD2U49&package=prepay_id=wx29164301554772fbc70d1d793335446010&signType=MD5&timeStamp=1548751382&key=GFDS8j98rewnmgl45wHTt980jg543wmg"
  12. hash := md5.New()
  13. hash.Write([]byte(st))
  14. sum := hash.Sum(nil)
  15. upper := strings.ToUpper(hex.EncodeToString(sum))
  16. fmt.Println(" ssad ", upper)
  17. }
  18. type Student struct {
  19. Name string `json:"name,omitempty"`
  20. Age int `json:"age,omitempty"`
  21. Sign string `json:"sign,omitempty"`
  22. Phone string `json:"phone,omitempty"`
  23. }
  24. func TestBodyMap_MarshalXML(t *testing.T) {
  25. student := new(Student)
  26. student.Name = "Jerry"
  27. student.Age = 28
  28. student.Phone = "18017448610"
  29. marshal, err := json.Marshal(student)
  30. if err != nil {
  31. fmt.Println("err:", err)
  32. }
  33. fmt.Println("marshal:", string(marshal))
  34. maps := make(map[string]interface{})
  35. err = json.Unmarshal(marshal, &maps)
  36. if err != nil {
  37. fmt.Println("err2:", err)
  38. }
  39. fmt.Println("maps:", maps)
  40. //maps := make(BodyMap)
  41. //maps.Set("name", "jerry")
  42. //maps.Set("age", 28)
  43. //maps.Set("phone", "13212345678")
  44. //
  45. //bytes, err := xml.Marshal(&maps)
  46. //if err != nil {
  47. // fmt.Println("err:", err)
  48. //}
  49. //fmt.Println("ssss:", string(bytes))
  50. }
  51. func TestVerifyWeChatResponseSign(t *testing.T) {
  52. student := new(Student)
  53. student.Name = "Jerry"
  54. student.Age = 1
  55. student.Sign = "544E55ED43B787B945FF0BF8344A4D69"
  56. student.Phone = "18017448610"
  57. maps := make(BodyMap)
  58. maps["name"] = "Jerry"
  59. maps["age"] = 1
  60. maps["sign"] = "544E55ED43B787B945FF0BF8344A4D69"
  61. maps["phone"] = "18017448610"
  62. ok, err := VerifyWeChatSign("ABCDEFG", "MD5", student)
  63. if err != nil {
  64. fmt.Println("errrrr:", err)
  65. return
  66. }
  67. fmt.Println("ok:", ok)
  68. }
  69. func TestDecryptWeChatOpenDataToStruct(t *testing.T) {
  70. data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
  71. iv := "Cds8j3VYoGvnTp1BrjXdJg=="
  72. session := "lyY4HPQbaOYzZdG+JcYK9w=="
  73. phone := new(WeChatUserPhone)
  74. //解密开放数据
  75. // encryptedData:包括敏感数据在内的完整用户信息的加密数据
  76. // iv:加密算法的初始向量
  77. // sessionKey:会话密钥
  78. // beanPtr:需要解析到的结构体指针
  79. err := DecryptWeChatOpenDataToStruct(data, iv, session, phone)
  80. if err != nil {
  81. fmt.Println("err:", err)
  82. return
  83. }
  84. fmt.Println("PhoneNumber:", phone.PhoneNumber)
  85. fmt.Println("PurePhoneNumber:", phone.PurePhoneNumber)
  86. fmt.Println("CountryCode:", phone.CountryCode)
  87. fmt.Println("Watermark:", phone.Watermark)
  88. sessionKey := "tiihtNczf5v6AKRyjwEUhQ=="
  89. encryptedData := "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew=="
  90. iv2 := "r7BXXKkLb8qrSNn05n0qiA=="
  91. //微信小程序 用户信息
  92. userInfo := new(WeChatAppletUserInfo)
  93. err = DecryptWeChatOpenDataToStruct(encryptedData, iv2, sessionKey, userInfo)
  94. if err != nil {
  95. fmt.Println("err:", err)
  96. return
  97. }
  98. fmt.Println("NickName:", userInfo.NickName)
  99. fmt.Println("AvatarUrl:", userInfo.AvatarUrl)
  100. fmt.Println("Country:", userInfo.Country)
  101. fmt.Println("Province:", userInfo.Province)
  102. fmt.Println("City:", userInfo.City)
  103. fmt.Println("Gender:", userInfo.Gender)
  104. fmt.Println("OpenId:", userInfo.OpenId)
  105. fmt.Println("UnionId:", userInfo.UnionId)
  106. fmt.Println("Watermark:", userInfo.Watermark)
  107. }
  108. func TestDecryptWeChatOpenDataToBodyMap(t *testing.T) {
  109. data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
  110. iv := "Cds8j3VYoGvnTp1BrjXdJg=="
  111. session := "lyY4HPQbaOYzZdG+JcYK9w=="
  112. //解密开放数据
  113. // encryptedData:包括敏感数据在内的完整用户信息的加密数据
  114. // iv:加密算法的初始向量
  115. // sessionKey:会话密钥
  116. bm, err := DecryptWeChatOpenDataToBodyMap(data, iv, session)
  117. if err != nil {
  118. fmt.Println("err:", err)
  119. return
  120. }
  121. fmt.Println("WeChatUserPhone:", bm)
  122. }