wechat.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_cygxzs/models"
  7. "hongze/hongze_cygxzs/utils"
  8. "rdluck_tools/http"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. type WxAccessToken struct {
  14. AccessToken string `json:"access_token"`
  15. ExpiresIn int `json:"expires_in"`
  16. RefreshToken string `json:"refresh_token"`
  17. Openid string `json:"openid"`
  18. Unionid string `json:"unionid"`
  19. Scope string `json:"scope"`
  20. Errcode int `json:"errcode"`
  21. Errmsg string `json:"errmsg"`
  22. }
  23. func WxGetUserOpenIdByCode(code string) (item *WxAccessToken, err error) {
  24. if code == "" {
  25. err = errors.New("code is empty")
  26. return nil, err
  27. }
  28. requestUrl := `https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code`
  29. requestUrl = fmt.Sprintf(requestUrl, utils.WxAppId, utils.WxAppSecret, code)
  30. result, err := http.Get(requestUrl)
  31. if err != nil {
  32. return nil, err
  33. }
  34. err = json.Unmarshal(result, &item)
  35. return
  36. }
  37. //小助手
  38. func WxGetUserOpenIdByCodeXzs(code string) (item *WxAccessToken, err error) {
  39. if code == "" {
  40. err = errors.New("code is empty")
  41. return nil, err
  42. }
  43. requestUrl := `https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code`
  44. requestUrl = fmt.Sprintf(requestUrl, utils.WxPublicAppId, utils.WxPublicAppSecret, code)
  45. result, err := http.Get(requestUrl)
  46. if err != nil {
  47. return nil, err
  48. }
  49. err = json.Unmarshal(result, &item)
  50. return
  51. }
  52. type WxToken struct {
  53. AccessToken string `json:"access_token"`
  54. ExpiresIn int `json:"expires_in"`
  55. Errcode int `json:"errcode"`
  56. Errmsg string `json:"errmsg"`
  57. }
  58. func WxGetToken() (item *WxToken, err error) {
  59. requestUrl := `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s`
  60. requestUrl = fmt.Sprintf(requestUrl, utils.WxAppId, utils.WxAppSecret)
  61. fmt.Println("requestUrl:", requestUrl)
  62. result, err := http.Get(requestUrl)
  63. if err != nil {
  64. return nil, err
  65. }
  66. err = json.Unmarshal(result, &item)
  67. fmt.Println("WxGetToken start")
  68. fmt.Println(string(result))
  69. fmt.Println("WxGetToken end")
  70. return
  71. }
  72. type WxUserInfo struct {
  73. Openid string `json:"openid"`
  74. Nickname string `json:"nickname"`
  75. Sex int `json:"sex"`
  76. Language string `json:"language"`
  77. City string `json:"city"`
  78. Province string `json:"province"`
  79. Country string `json:"country"`
  80. Headimgurl string `json:"headimgurl"`
  81. SubscribeTime int `json:"subscribe_time"`
  82. Unionid string `json:"unionid"`
  83. Remark string `json:"remark"`
  84. Groupid int `json:"groupid"`
  85. SubscribeScene string `json:"subscribe_scene"`
  86. Errcode int `json:"errcode"`
  87. Errmsg string `json:"errmsg"`
  88. SessionKey string `json:"session_key"`
  89. }
  90. //func WxGetUserInfo(openId, accessToken string) (item *WxUserInfo, err error) {
  91. // requestUrl := `https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s`
  92. // requestUrl = fmt.Sprintf(requestUrl, accessToken, openId)
  93. // result, err := http.Get(requestUrl)
  94. // if err != nil {
  95. // return
  96. // }
  97. // fmt.Println("result:", string(result))
  98. // err = json.Unmarshal(result, &item)
  99. // return
  100. //}
  101. func WxGetUserInfo(openId, accessToken string) (item *WxUserInfo, err error) {
  102. requestUrl := `https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN`
  103. requestUrl = fmt.Sprintf(requestUrl, accessToken, openId)
  104. result, err := http.Get(requestUrl)
  105. fmt.Println(requestUrl)
  106. if err != nil {
  107. return
  108. }
  109. utils.FileLog.Info("WxGetUserInfo:%s openId:%s,accessToken:%s ", string(result), openId, accessToken)
  110. utils.FileLog.Info("WxGetUserInfo Result:%s ", string(result))
  111. err = json.Unmarshal(result, &item)
  112. return
  113. }
  114. func GetWxSignature(ticket, url, noncestr string) (string, string, int64) {
  115. timestamp := time.Now().Unix()
  116. signStr := strings.Join([]string{"jsapi_ticket=", ticket,
  117. "&noncestr=", noncestr,
  118. "&timestamp=", strconv.FormatInt(timestamp, 10), "&url=", url}, "")
  119. signature := utils.Sha1(signStr)
  120. fmt.Println("signStr", signStr)
  121. return signature, noncestr, timestamp
  122. }
  123. type WxUserDetail struct {
  124. Unionid string
  125. Headimgurl string
  126. Nickname string
  127. }
  128. func GetWxAccessTokenByXzs() (accessTokenStr string, err error) {
  129. //缓存校验
  130. //cacheKey := fmt.Sprint("xygxxzs_wxtoken")
  131. //
  132. //
  133. //accessTokenStr, _ = utils.Rc.RedisString("xygxxzs_wxtoken")
  134. //
  135. //if accessTokenStr != "" {
  136. // accessTokens, err := utils.Rc.RedisString("xygxxzs_wxtoken")
  137. // if err != nil {
  138. // fmt.Println(err)
  139. // }
  140. // fmt.Println("string", accessTokens)
  141. // accessTokenStr = accessTokens
  142. //} else {
  143. // WxAccessToken, err := GetWxTokenByXzs()
  144. // if err != nil {
  145. // fmt.Println(err)
  146. // }
  147. // utils.Rc.Put(cacheKey, WxAccessToken.AccessToken, time.Second*7000)
  148. //
  149. // accessTokenStr = WxAccessToken.AccessToken
  150. //}
  151. WxAccessToken, err := GetWxTokenByXzs()
  152. accessTokenStr = WxAccessToken.AccessToken
  153. return
  154. }
  155. //获取小助手的微信Token
  156. func GetWxTokenByXzs() (item *WxAccessToken, err error) {
  157. getUrl := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + utils.WxPublicAppId + "&secret=" + utils.WxPublicAppSecret
  158. result, err := http.Get(getUrl)
  159. if err != nil {
  160. return
  161. }
  162. err = json.Unmarshal(result, &item)
  163. if err != nil {
  164. fmt.Println("GetWxToken Unmarshal Err:%s", err.Error())
  165. return
  166. }
  167. if item.Errmsg != "" {
  168. }
  169. return
  170. }
  171. func GetWxTicket(accessToken string) (string, error) {
  172. Url := strings.Join([]string{"https://api.weixin.qq.com/cgi-bin/ticket/getticket",
  173. "?access_token=", accessToken,
  174. "&type=jsapi"}, "")
  175. infoBody, err := http.Get(Url)
  176. if err != nil {
  177. return "", err
  178. }
  179. atr := models.WxTicket{}
  180. err = json.Unmarshal(infoBody, &atr)
  181. fmt.Println("ticket result:", string(infoBody))
  182. if err != nil {
  183. return atr.Errmsg, err
  184. } else {
  185. return atr.Ticket, nil
  186. }
  187. }