wx_ServiceApi.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package wechat
  2. import (
  3. "fmt"
  4. "github.com/iGoogle-ink/gopay"
  5. "net/http"
  6. )
  7. func Code2Session() {
  8. //获取微信用户的OpenId、SessionKey、UnionId
  9. // appId:APPID
  10. // appSecret:AppSecret
  11. // wxCode:小程序调用wx.login 获取的code
  12. userIdRsp, err := gopay.Code2Session("AppID", "APPSecret", "011EZg6p0VO47n1p2W4p0mle6p0EZg6u")
  13. if err != nil {
  14. fmt.Println("err:", err)
  15. return
  16. }
  17. fmt.Println("SessionKey:", userIdRsp.SessionKey)
  18. fmt.Println("ExpiresIn:", userIdRsp.ExpiresIn)
  19. fmt.Println("OpenID:", userIdRsp.Openid)
  20. fmt.Println("UnionID:", userIdRsp.Unionid)
  21. fmt.Println("Errcode:", userIdRsp.Errcode)
  22. fmt.Println("Errmsg:", userIdRsp.Errmsg)
  23. }
  24. func GetAccessToken() {
  25. //获取小程序全局唯一后台接口调用凭据(AccessToken:157字符)
  26. // appId:APPID
  27. // appSecret:AppSecret
  28. rsp, err := gopay.GetAccessToken("AppID", "APPSecret")
  29. if err != nil {
  30. fmt.Println("err:", err)
  31. return
  32. }
  33. fmt.Println("AccessToken:", rsp.AccessToken)
  34. fmt.Println("ExpiresIn:", rsp.ExpiresIn)
  35. fmt.Println("Errcode:", rsp.Errcode)
  36. fmt.Println("Errmsg:", rsp.Errmsg)
  37. }
  38. func GetPaidUnionId() {
  39. accessToken := "21_3puo3mxoK6Ry2bR7Dh-qdn41wUP1wClwke8Zhf9a_i39jfWRq9rhNJZZZHaOt_Yad-Gp6u9_46dGW0RbIMz3nANInRI3m-1glvCnGW47v63sjYWV1iyTKOHGwDVxEv78kY-0OfkmkiIveVqAZCZaAAAQTQ"
  40. //用户支付完成后,获取该用户的 UnionId,无需用户授权。
  41. // accessToken:接口调用凭据
  42. // openId:用户的OpenID
  43. // transactionId:微信支付订单号
  44. rsp, err := gopay.GetPaidUnionId(accessToken, "o0Df70MSI4Ygv2KQ2cLnoMN5CXI8", "4200000326201905256499385970")
  45. if err != nil {
  46. fmt.Println("err:", err)
  47. return
  48. }
  49. fmt.Println("Unionid:", rsp.Unionid)
  50. fmt.Println("Errcode:", rsp.Errcode)
  51. fmt.Println("Errmsg:", rsp.Errmsg)
  52. }
  53. func GetWeChatUserInfo() {
  54. accessToken := "21_3puo3mxoK6Ry2bR7Dh-qdn41wUP1wClwke8Zhf9a_i39jfWRq9rhNJZZZHaOt_Yad-Gp6u9_46dGW0RbIMz3nANInRI3m-1glvCnGW47v63sjYWV1iyTKOHGwDVxEv78kY-0OfkmkiIveVqAZCZaAAAQTQ"
  55. //获取用户基本信息(UnionID机制)
  56. // accessToken:接口调用凭据
  57. // openId:用户的OpenID
  58. // lang:默认为 zh_CN ,可选填 zh_CN 简体,zh_TW 繁体,en 英语
  59. userInfo, err := gopay.GetWeChatUserInfo(accessToken, "o0Df70H2Q0fY8JXh1aFPIRyOBgu8")
  60. if err != nil {
  61. fmt.Println("err:", err)
  62. return
  63. }
  64. fmt.Println("userInfo:", *userInfo)
  65. }
  66. func DecryptOpenDataToStruct() {
  67. data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
  68. iv := "Cds8j3VYoGvnTp1BrjXdJg=="
  69. session := "lyY4HPQbaOYzZdG+JcYK9w=="
  70. phone := new(gopay.WeChatUserPhone)
  71. //解密开放数据
  72. // encryptedData:包括敏感数据在内的完整用户信息的加密数据
  73. // iv:加密算法的初始向量
  74. // sessionKey:会话密钥
  75. // beanPtr:需要解析到的结构体指针
  76. err := gopay.DecryptOpenDataToStruct(data, iv, session, phone)
  77. if err != nil {
  78. fmt.Println("err:", err)
  79. return
  80. }
  81. fmt.Println("PhoneNumber:", phone.PhoneNumber)
  82. fmt.Println("PurePhoneNumber:", phone.PurePhoneNumber)
  83. fmt.Println("CountryCode:", phone.CountryCode)
  84. fmt.Println("Watermark:", phone.Watermark)
  85. }
  86. func GetOpenIdByAuthCode() {
  87. //授权码查询openid
  88. // appId:APPID
  89. // mchId:商户号
  90. // apiKey:ApiKey
  91. // authCode:用户授权码
  92. // nonceStr:随即字符串
  93. openIdRsp, err := gopay.GetOpenIdByAuthCode("wxdaa2ab9ef87b5497", "1368139502", "GFDS8j98rewnmgl45wHTt980jg543abc", "135127679952609396", gopay.GetRandomString(32))
  94. if err != nil {
  95. fmt.Println("err:", err)
  96. return
  97. }
  98. fmt.Println("ReturnCode:", openIdRsp.ReturnCode)
  99. fmt.Println("ReturnMsg:", openIdRsp.ReturnMsg)
  100. fmt.Println("ResultCode:", openIdRsp.ResultCode)
  101. fmt.Println("Appid:", openIdRsp.Appid)
  102. fmt.Println("MchId:", openIdRsp.MchId)
  103. fmt.Println("NonceStr:", openIdRsp.NonceStr)
  104. fmt.Println("err_code:", openIdRsp.ErrCode)
  105. fmt.Println("Openid:", openIdRsp.Openid)
  106. }
  107. //解析notify参数、验签、返回数据到微信
  108. func ParseWeChatNotifyResultAndVerifyWeChatResultSign(req *http.Request) string {
  109. rsp := new(gopay.WeChatNotifyResponse)
  110. //解析参数
  111. notifyReq, err := gopay.ParseWeChatNotifyResult(req)
  112. if err != nil {
  113. fmt.Println("err:", err)
  114. }
  115. fmt.Println("notifyReq:", *notifyReq)
  116. //验签
  117. ok, sign := gopay.VerifyWeChatResultSign("GFDS8j98rewnmgl45wHTt980jg543abc", gopay.SignType_MD5, notifyReq)
  118. fmt.Println("微信验签是否通过:", ok)
  119. fmt.Println("计算的sign:", sign)
  120. rsp.ReturnCode = gopay.SUCCESS
  121. rsp.ReturnMsg = "OK"
  122. return rsp.ToXmlString()
  123. }
  124. //BodyMap 解析notify参数、验签
  125. func ParseWeChatNotifyResultToBodyMapAndVerifyWeChatResultSignByBodyMap(req *http.Request) {
  126. //解析到BodyMap
  127. bm, err := gopay.ParseWeChatNotifyResultToBodyMap(req)
  128. if err != nil {
  129. fmt.Println("err:", err)
  130. }
  131. fmt.Println("bm:", bm)
  132. //验签
  133. ok, sign := gopay.VerifyWeChatResultSignByBodyMap("GFDS8j98rewnmgl45wHTt980jg543abc", gopay.SignType_MD5, bm)
  134. fmt.Println("微信验签是否通过:", ok)
  135. fmt.Println("计算的sign:", sign)
  136. }