wechat_client_test.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. package gopay
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "fmt"
  6. "log"
  7. "strings"
  8. "testing"
  9. )
  10. func TestWeChatClient_UnifiedOrder(t *testing.T) {
  11. //初始化微信客户端
  12. // appId:应用ID
  13. // MchID:商户ID
  14. // apiKey:API秘钥值
  15. // isProd:是否是正式环境
  16. client := NewWeChatClient(AppID, MchID, ApiKey, false)
  17. //初始化参数Map
  18. body := make(BodyMap)
  19. body.Set("nonce_str", GetRandomString(32))
  20. body.Set("body", "测试支付")
  21. number := GetRandomString(32)
  22. log.Println("Number:", number)
  23. body.Set("out_trade_no", number)
  24. body.Set("total_fee", 10)
  25. body.Set("spbill_create_ip", "124.77.173.62")
  26. body.Set("notify_url", "http://www.gopay.ink")
  27. body.Set("trade_type", TradeType_H5)
  28. body.Set("device_info", "WEB")
  29. body.Set("sign_type", SignType_MD5)
  30. //body.Set("scene_info", `{"h5_info": {"type":"Wap","wap_url": "http://www.gopay.ink","wap_name": "测试支付"}}`)
  31. //body.Set("openid", OpenID)
  32. //请求支付下单,成功后得到结果
  33. wxRsp, err := client.UnifiedOrder(body)
  34. if err != nil {
  35. fmt.Println("Error:", err)
  36. }
  37. fmt.Println("wxRsp:", *wxRsp)
  38. //timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
  39. ////获取小程序需要的paySign
  40. //pac := "prepay_id=" + wxRsp.PrepayId
  41. //paySign := GetMiniPaySign(AppID, wxRsp.NonceStr, pac, SignType_MD5, timeStamp, ApiKey)
  42. //fmt.Println("paySign:", paySign)
  43. //fmt.Println("Response:", wxRsp)
  44. }
  45. func TestWeChatClient_QueryOrder(t *testing.T) {
  46. //初始化微信客户端
  47. // appId:应用ID
  48. // MchID:商户ID
  49. // apiKey:API秘钥值
  50. // isProd:是否是正式环境
  51. client := NewWeChatClient(AppID, MchID, ApiKey, false)
  52. //初始化参数结构体
  53. body := make(BodyMap)
  54. body.Set("out_trade_no", "GYWX201901301040355706100401")
  55. body.Set("nonce_str", GetRandomString(32))
  56. body.Set("sign_type", SignType_MD5)
  57. //请求订单查询,成功后得到结果
  58. wxRsp, err := client.QueryOrder(body)
  59. if err != nil {
  60. fmt.Println("Error:", err)
  61. }
  62. fmt.Println("Response:", wxRsp)
  63. }
  64. func TestWeChatClient_CloseOrder(t *testing.T) {
  65. //初始化微信客户端
  66. // appId:应用ID
  67. // MchID:商户ID
  68. // ApiKey:Key值
  69. // isProd:是否是正式环境
  70. client := NewWeChatClient(AppID, MchID, ApiKey, false)
  71. //初始化参数结构体
  72. body := make(BodyMap)
  73. body.Set("out_trade_no", "MfZC2segKxh0bnJSELbvKNeH3d9oWvvQ")
  74. body.Set("nonce_str", GetRandomString(32))
  75. body.Set("sign_type", SignType_MD5)
  76. //请求订单查询,成功后得到结果
  77. wxRsp, err := client.CloseOrder(body)
  78. if err != nil {
  79. fmt.Println("Error:", err)
  80. }
  81. fmt.Println("Response:", wxRsp)
  82. }
  83. func TestWeChatClient_Refund(t *testing.T) {
  84. //初始化微信客户端
  85. // appId:应用ID
  86. // MchID:商户ID
  87. // ApiKey:Key值
  88. // isProd:是否是正式环境
  89. client := NewWeChatClient(AppID, MchID2, ApiKey2, true)
  90. //初始化参数结构体
  91. body := make(BodyMap)
  92. body.Set("out_trade_no", "GYWX201906262222504974571772")
  93. body.Set("nonce_str", GetRandomString(32))
  94. body.Set("sign_type", SignType_MD5)
  95. s := GetRandomString(64)
  96. fmt.Println("s:", s)
  97. body.Set("out_refund_no", s)
  98. body.Set("total_fee", 500)
  99. body.Set("refund_fee", 500)
  100. //请求申请退款(沙箱环境下,证书路径参数可传空)
  101. // body:参数Body
  102. // certFilePath:cert证书路径
  103. // keyFilePath:Key证书路径
  104. // pkcs12FilePath:p12证书路径
  105. wxRsp, err := client.Refund(body, "cert/apiclient_cert.pem", "cert/apiclient_key.pem", "cert/apiclient_cert.p12")
  106. if err != nil {
  107. fmt.Println("Error:", err)
  108. }
  109. fmt.Println("Response:", wxRsp)
  110. }
  111. func TestWeChatClient_QueryRefund(t *testing.T) {
  112. //初始化微信客户端
  113. // appId:应用ID
  114. // MchID:商户ID
  115. // ApiKey:Key值
  116. // isProd:是否是正式环境
  117. client := NewWeChatClient(AppID, MchID, ApiKey, false)
  118. //初始化参数结构体
  119. body := make(BodyMap)
  120. body.Set("out_refund_no", "vk4264I1UQ3Hm3E4AKsavK8npylGSgQA092f9ckUxp8A2gXmnsLEdsupURVTcaC7")
  121. body.Set("nonce_str", GetRandomString(32))
  122. body.Set("sign_type", SignType_MD5)
  123. //请求申请退款
  124. wxRsp, err := client.QueryRefund(body)
  125. if err != nil {
  126. fmt.Println("Error:", err)
  127. }
  128. fmt.Println("Response:", wxRsp)
  129. }
  130. func TestWeChatClient_DownloadBill(t *testing.T) {
  131. //初始化微信客户端
  132. // appId:应用ID
  133. // MchID:商户ID
  134. // ApiKey:Key值
  135. // isProd:是否是正式环境
  136. client := NewWeChatClient(AppID, MchID, ApiKey, false)
  137. //初始化参数结构体
  138. body := make(BodyMap)
  139. body.Set("nonce_str", GetRandomString(32))
  140. body.Set("sign_type", SignType_MD5)
  141. body.Set("bill_date", "20190122")
  142. body.Set("bill_type", "ALL")
  143. //请求订单查询,成功后得到结果
  144. wxRsp, err := client.DownloadBill(body)
  145. if err != nil {
  146. fmt.Println("Error:", err)
  147. }
  148. fmt.Println("Response:", wxRsp)
  149. }
  150. func TestWeChatClient_DownloadFundFlow(t *testing.T) {
  151. //初始化微信客户端
  152. // appId:应用ID
  153. // MchID:商户ID
  154. // ApiKey:Key值
  155. // isProd:是否是正式环境
  156. client := NewWeChatClient(AppID, MchID, ApiKey, false)
  157. //初始化参数结构体
  158. body := make(BodyMap)
  159. body.Set("nonce_str", GetRandomString(32))
  160. body.Set("sign_type", SignType_HMAC_SHA256)
  161. body.Set("bill_date", "20190122")
  162. body.Set("account_type", "Basic")
  163. //请求订单查询,成功后得到结果,沙箱环境下,证书路径参数可传空
  164. wxRsp, err := client.DownloadFundFlow(body, "", "", "")
  165. if err != nil {
  166. fmt.Println("Error:", err)
  167. }
  168. fmt.Println("Response:", wxRsp)
  169. }
  170. func TestWeChatClient_BatchQueryComment(t *testing.T) {
  171. //初始化微信客户端
  172. // appId:应用ID
  173. // MchID:商户ID
  174. // ApiKey:Key值
  175. // isProd:是否是正式环境
  176. client := NewWeChatClient(AppID, MchID, ApiKey, false)
  177. //初始化参数结构体
  178. body := make(BodyMap)
  179. body.Set("nonce_str", GetRandomString(32))
  180. body.Set("sign_type", SignType_HMAC_SHA256)
  181. body.Set("begin_time", "20190120000000")
  182. body.Set("end_time", "20190122174000")
  183. body.Set("offset", "0")
  184. //请求订单查询,成功后得到结果,沙箱环境下,证书路径参数可传空
  185. wxRsp, err := client.BatchQueryComment(body, "", "", "")
  186. if err != nil {
  187. fmt.Println("Error:", err)
  188. }
  189. fmt.Println("Response:", wxRsp)
  190. }
  191. func TestWeChatClient_Micropay(t *testing.T) {
  192. //初始化微信客户端
  193. // appId:应用ID
  194. // MchID:商户ID
  195. // ApiKey:Key值
  196. // isProd:是否是正式环境
  197. client := NewWeChatClient(AppID, MchID, ApiKey, false)
  198. //初始化参数Map
  199. body := make(BodyMap)
  200. body.Set("nonce_str", GetRandomString(32))
  201. body.Set("body", "扫用户付款码支付")
  202. number := GetRandomString(32)
  203. log.Println("Number:", number)
  204. body.Set("out_trade_no", number)
  205. body.Set("total_fee", 1)
  206. body.Set("spbill_create_ip", "124.77.173.62")
  207. body.Set("auth_code", "120061098828009406")
  208. body.Set("sign_type", SignType_MD5)
  209. //请求支付,成功后得到结果
  210. wxRsp, err := client.Micropay(body)
  211. if err != nil {
  212. fmt.Println("Error:", err)
  213. }
  214. fmt.Println("Response:", wxRsp)
  215. }
  216. func TestWeChatClient_Reverse(t *testing.T) {
  217. //初始化微信客户端
  218. // appId:应用ID
  219. // MchID:商户ID
  220. // ApiKey:Key值
  221. // isProd:是否是正式环境
  222. client := NewWeChatClient(AppID, MchID, ApiKey, false)
  223. //初始化参数Map
  224. body := make(BodyMap)
  225. body.Set("nonce_str", GetRandomString(32))
  226. body.Set("out_trade_no", "6aDCor1nUcAihrV5JBlI09tLvXbUp02B")
  227. body.Set("sign_type", SignType_MD5)
  228. //请求撤销订单,成功后得到结果,沙箱环境下,证书路径参数可传空
  229. wxRsp, err := client.Reverse(body, "", "", "")
  230. if err != nil {
  231. fmt.Println("Error:", err)
  232. }
  233. fmt.Println("Response:", wxRsp)
  234. }
  235. func TestMd5(t *testing.T) {
  236. st := "appid=wxdaa2ab9ef87b5497&nonceStr=9k20rM66parD2U49&package=prepay_id=wx29164301554772fbc70d1d793335446010&signType=MD5&timeStamp=1548751382&key=GFDS8j98rewnmgl45wHTt980jg543wmg"
  237. hash := md5.New()
  238. hash.Write([]byte(st))
  239. sum := hash.Sum(nil)
  240. upper := strings.ToUpper(hex.EncodeToString(sum))
  241. fmt.Println(" ssad ", upper)
  242. }
  243. func TestCode2Session(t *testing.T) {
  244. userIdRsp, err := Code2Session(AppID, APPSecret, "011EZg6p0VO47n1p2W4p0mle6p0EZg6u")
  245. if err != nil {
  246. fmt.Println("err:", err)
  247. return
  248. }
  249. fmt.Println("SessionKey:", userIdRsp.SessionKey)
  250. fmt.Println("ExpiresIn:", userIdRsp.ExpiresIn)
  251. fmt.Println("OpenID:", userIdRsp.Openid)
  252. fmt.Println("UnionID:", userIdRsp.Unionid)
  253. fmt.Println("Errcode:", userIdRsp.Errcode)
  254. fmt.Println("Errmsg:", userIdRsp.Errmsg)
  255. }
  256. func TestGetAccessToken(t *testing.T) {
  257. rsp, err := GetAccessToken(AppID, APPSecret)
  258. if err != nil {
  259. fmt.Println("err:", err)
  260. return
  261. }
  262. fmt.Println("AccessToken:", rsp.AccessToken)
  263. fmt.Println("ExpiresIn:", rsp.ExpiresIn)
  264. fmt.Println("Errcode:", rsp.Errcode)
  265. fmt.Println("Errmsg:", rsp.Errmsg)
  266. }
  267. func TestGetPaidUnionId(t *testing.T) {
  268. accessToken := "21_3puo3mxoK6Ry2bR7Dh-qdn41wUP1wClwke8Zhf9a_i39jfWRq9rhNJZZZHaOt_Yad-Gp6u9_46dGW0RbIMz3nANInRI3m-1glvCnGW47v63sjYWV1iyTKOHGwDVxEv78kY-0OfkmkiIveVqAZCZaAAAQTQ"
  269. rsp, err := GetPaidUnionId(accessToken, "o0Df70MSI4Ygv2KQ2cLnoMN5CXI8", "4200000326201905256499385970")
  270. if err != nil {
  271. fmt.Println("err:", err)
  272. return
  273. }
  274. fmt.Println("Unionid:", rsp.Unionid)
  275. fmt.Println("Errcode:", rsp.Errcode)
  276. fmt.Println("Errmsg:", rsp.Errmsg)
  277. }
  278. func TestGetWeChatUserInfo(t *testing.T) {
  279. accessToken := "21_3puo3mxoK6Ry2bR7Dh-qdn41wUP1wClwke8Zhf9a_i39jfWRq9rhNJZZZHaOt_Yad-Gp6u9_46dGW0RbIMz3nANInRI3m-1glvCnGW47v63sjYWV1iyTKOHGwDVxEv78kY-0OfkmkiIveVqAZCZaAAAQTQ"
  280. userInfo, err := GetWeChatUserInfo(accessToken, OpenID)
  281. if err != nil {
  282. fmt.Println("err:", err)
  283. return
  284. }
  285. fmt.Println("userInfo:", userInfo)
  286. }
  287. func TestDecryptOpenDataToStruct(t *testing.T) {
  288. data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
  289. iv := "Cds8j3VYoGvnTp1BrjXdJg=="
  290. session := "lyY4HPQbaOYzZdG+JcYK9w=="
  291. phone := new(WeChatUserPhone)
  292. err := DecryptOpenDataToStruct(data, iv, session, phone)
  293. if err != nil {
  294. fmt.Println("err:", err)
  295. return
  296. }
  297. fmt.Println("PhoneNumber:", phone.PhoneNumber)
  298. fmt.Println("PurePhoneNumber:", phone.PurePhoneNumber)
  299. fmt.Println("CountryCode:", phone.CountryCode)
  300. fmt.Println("Watermark:", phone.Watermark)
  301. }