wechat_client_test.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package gopay
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "testing"
  6. )
  7. type Student struct {
  8. Name string `json:"name,omitempty"`
  9. Age int `json:"age,omitempty"`
  10. Sign string `json:"sign,omitempty"`
  11. Phone string `json:"phone,omitempty"`
  12. }
  13. func TestBodyMap_MarshalXML(t *testing.T) {
  14. student := new(Student)
  15. student.Name = "Jerry"
  16. student.Age = 28
  17. student.Phone = "18017448610"
  18. marshal, err := json.Marshal(student)
  19. if err != nil {
  20. fmt.Println("err:", err)
  21. }
  22. fmt.Println("marshal:", string(marshal))
  23. maps := make(map[string]interface{})
  24. err = json.Unmarshal(marshal, &maps)
  25. if err != nil {
  26. fmt.Println("err2:", err)
  27. }
  28. fmt.Println("maps:", maps)
  29. //maps := make(BodyMap)
  30. //maps.Set("name", "jerry")
  31. //maps.Set("age", 28)
  32. //maps.Set("phone", "13212345678")
  33. //
  34. //bytes, err := xml.Marshal(&maps)
  35. //if err != nil {
  36. // fmt.Println("err:", err)
  37. //}
  38. //fmt.Println("ssss:", string(bytes))
  39. }
  40. func TestVerifyWeChatResponseSign(t *testing.T) {
  41. student := new(Student)
  42. student.Name = "Jerry"
  43. student.Age = 1
  44. student.Sign = "544E55ED43B787B945FF0BF8344A4D69"
  45. student.Phone = "18017448610"
  46. maps := make(BodyMap)
  47. maps["name"] = "Jerry"
  48. maps["age"] = 1
  49. maps["sign"] = "544E55ED43B787B945FF0BF8344A4D69"
  50. maps["phone"] = "18017448610"
  51. ok, err := VerifyWeChatSign("ABCDEFG", "MD5", student)
  52. if err != nil {
  53. fmt.Println("errrrr:", err)
  54. return
  55. }
  56. fmt.Println("ok:", ok)
  57. }
  58. func TestDecryptWeChatOpenDataToStruct(t *testing.T) {
  59. data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
  60. iv := "Cds8j3VYoGvnTp1BrjXdJg=="
  61. session := "lyY4HPQbaOYzZdG+JcYK9w=="
  62. phone := new(WeChatUserPhone)
  63. //解密开放数据
  64. // encryptedData:包括敏感数据在内的完整用户信息的加密数据
  65. // iv:加密算法的初始向量
  66. // sessionKey:会话密钥
  67. // beanPtr:需要解析到的结构体指针
  68. err := DecryptWeChatOpenDataToStruct(data, iv, session, phone)
  69. if err != nil {
  70. fmt.Println("err:", err)
  71. return
  72. }
  73. fmt.Println("PhoneNumber:", phone.PhoneNumber)
  74. fmt.Println("PurePhoneNumber:", phone.PurePhoneNumber)
  75. fmt.Println("CountryCode:", phone.CountryCode)
  76. fmt.Println("Watermark:", phone.Watermark)
  77. sessionKey := "tiihtNczf5v6AKRyjwEUhQ=="
  78. encryptedData := "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew=="
  79. iv2 := "r7BXXKkLb8qrSNn05n0qiA=="
  80. //微信小程序 用户信息
  81. userInfo := new(WeChatAppletUserInfo)
  82. err = DecryptWeChatOpenDataToStruct(encryptedData, iv2, sessionKey, userInfo)
  83. if err != nil {
  84. fmt.Println("err:", err)
  85. return
  86. }
  87. fmt.Println("NickName:", userInfo.NickName)
  88. fmt.Println("AvatarUrl:", userInfo.AvatarUrl)
  89. fmt.Println("Country:", userInfo.Country)
  90. fmt.Println("Province:", userInfo.Province)
  91. fmt.Println("City:", userInfo.City)
  92. fmt.Println("Gender:", userInfo.Gender)
  93. fmt.Println("OpenId:", userInfo.OpenId)
  94. fmt.Println("UnionId:", userInfo.UnionId)
  95. fmt.Println("Watermark:", userInfo.Watermark)
  96. }
  97. func TestDecryptWeChatOpenDataToBodyMap(t *testing.T) {
  98. data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
  99. iv := "Cds8j3VYoGvnTp1BrjXdJg=="
  100. session := "lyY4HPQbaOYzZdG+JcYK9w=="
  101. //解密开放数据
  102. // encryptedData:包括敏感数据在内的完整用户信息的加密数据
  103. // iv:加密算法的初始向量
  104. // sessionKey:会话密钥
  105. bm, err := DecryptWeChatOpenDataToBodyMap(data, iv, session)
  106. if err != nil {
  107. fmt.Println("err:", err)
  108. return
  109. }
  110. fmt.Println("WeChatUserPhone:", bm)
  111. }
  112. func TestDecryptRefundNotifyReqInfo(t *testing.T) {
  113. key := "ziR0QKsTUfMOuochC9RfCdmfHECorQAP"
  114. data := "YYwp8C48th0wnQzTqeI+41pflB26v+smFj9z6h9RPBgxTyZyxc+4YNEz7QEgZNWj/6rIb2MfyWMZmCc41CfjKSssoSZPXxOhUayb6KvNSZ1p6frOX1PDWzhyruXK7ouNND+gDsG4yZ0XXzsL4/pYNwLLba/71QrnkJ/BHcByk4EXnglju5DLup9pJQSnTxjomI9Rxu57m9jg5lLQFxMWXyeASZJNvof0ulnHlWJswS4OxKOkmW7VEyKyLGV6npoOm03Qsx2wkRxLsSa9gPpg4hdaReeUqh1FMbm7aWjyrVYT/MEZWg98p4GomEIYvz34XfDncTezX4bf/ZiSLXt79aE1/YTZrYfymXeCrGjlbe0rg/T2ezJHAC870u2vsVbY1/KcE2A443N+DEnAziXlBQ1AeWq3Rqk/O6/TMM0lomzgctAOiAMg+bh5+Gu1ubA9O3E+vehULydD5qx2o6i3+qA9ORbH415NyRrQdeFq5vmCiRikp5xYptWiGZA0tkoaLKMPQ4ndE5gWHqiBbGPfULZWokI+QjjhhBmwgbd6J0VqpRorwOuzC/BHdkP72DCdNcm7IDUpggnzBIy0+seWIkcHEryKjge3YDHpJeQCqrAH0CgxXHDt1xtbQbST1VqFyuhPhUjDXMXrknrGPN/oE1t0rLRq+78cI+k8xe5E6seeUXQsEe8r3358mpcDYSmXWSXVZxK6er9EF98APqHwcndyEJD2YyCh/mMVhERuX+7kjlRXSiNUWa/Cv/XAKFQuvUYA5ea2eYWtPRHa4DpyuF1SNsaqVKfgqKXZrJHfAgslVpSVqUpX4zkKszHF4kwMZO3M7J1P94Mxa7Tm9mTOJePOoHPXeEB+m9rX6pSfoi3mJDQ5inJ+Vc4gOkg/Wd/lqiy6TTyP/dHDN6/v+AuJx5AXBo/2NDD3fWhHjkqEKIuARr2ClZt9ZRQO4HkXdZo7CN06sGCHk48Tg8PmxnxKcMZm7Aoquv5yMIM2gWSWIRJhwJ8cUpafIHc+GesDlbF6Zbt+/KXkafJAQq2RklEN+WvZ/zFz113EPgWPjp16TwBoziq96MMekvWKY/vdhjol8VFtGH9F61Oy1Xwf6DJtPw=="
  115. refundNotify, err := DecryptRefundNotifyReqInfo(data, key)
  116. if err != nil {
  117. fmt.Println("err:", err)
  118. return
  119. }
  120. fmt.Println("refundNotify:", *refundNotify)
  121. }
  122. func TestBodyMap_Set_Get(t *testing.T) {
  123. bm := make(BodyMap)
  124. sceneInfo := make(map[string]map[string]string)
  125. h5Info := make(map[string]string)
  126. h5Info["type"] = "Wap"
  127. h5Info["wap_url"] = "http://www.gopay.ink"
  128. h5Info["wap_name"] = "H5测试支付"
  129. sceneInfo["h5_info"] = h5Info
  130. bm.Set("scene_info", sceneInfo)
  131. fmt.Println("Get1:", bm.Get("scene_info"))
  132. bm.Set("student", &Student{
  133. Name: "Jerry",
  134. Age: 26,
  135. Sign: "123465",
  136. Phone: "123654987",
  137. })
  138. fmt.Println("Get2:", bm.Get("student"))
  139. }