wechat_client_test.go 8.2 KB

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