wechat_pc.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_api/models"
  7. "hongze/hongze_api/utils"
  8. "rdluck_tools/http"
  9. "time"
  10. )
  11. func PcWxGetUserOpenIdByCode(code string) (item *WxAccessToken, err error) {
  12. if code == "" {
  13. err = errors.New("code is empty")
  14. return nil, err
  15. }
  16. requestUrl := `https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code`
  17. requestUrl = fmt.Sprintf(requestUrl, utils.PcWxAppId, utils.PcWxAppSecret, code)
  18. result, err := http.Get(requestUrl)
  19. if err != nil {
  20. return nil, err
  21. }
  22. utils.FileLog.Info("WxGetUserOpenIdByCode:%s", string(result))
  23. err = json.Unmarshal(result, &item)
  24. return
  25. }
  26. func PcWxGetAccessToken() (accessToken string, err error) {
  27. wxToken, err := models.PcGetWxToken()
  28. fmt.Println(err, wxToken)
  29. if err != nil && err.Error() != utils.ErrNoRow() {
  30. return
  31. }
  32. fmt.Println(wxToken, err)
  33. //wx_token 不存在
  34. if wxToken == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  35. fmt.Println("token is nil")
  36. token, err := PcWxGetToken()
  37. if err != nil {
  38. return accessToken, err
  39. }
  40. if token.Errmsg != "" {
  41. err = errors.New("获取access_token 失败 errcode:" + token.Errmsg + " ;errmsg:" + token.Errmsg)
  42. return "", err
  43. }
  44. expiresIn := time.Now().Add(110 * time.Minute).Unix()
  45. err = models.PcAddWxToken(token.AccessToken, expiresIn)
  46. if err != nil {
  47. err = errors.New("新增wx_token失败" + err.Error())
  48. return accessToken, err
  49. }
  50. accessToken = token.AccessToken
  51. } else {
  52. fmt.Println("token is not nil")
  53. if wxToken.ExpiresIn <= time.Now().Unix() {
  54. token, err := PcWxGetToken()
  55. if err != nil {
  56. return accessToken, err
  57. }
  58. if token.Errmsg != "" {
  59. err = errors.New("获取access_token 失败 errcode:" + token.Errmsg + " ;errmsg:" + token.Errmsg)
  60. return "", err
  61. }
  62. expiresIn := time.Now().Add(110 * time.Minute).Unix()
  63. err = models.PcUpdateWxToken(token.AccessToken, expiresIn, wxToken.Id)
  64. if err != nil {
  65. err = errors.New("修改wx_token失败" + err.Error())
  66. return accessToken, err
  67. }
  68. accessToken = token.AccessToken
  69. } else {
  70. accessToken = wxToken.AccessToken
  71. }
  72. }
  73. return
  74. }
  75. func PcWxGetToken() (item *WxToken, err error) {
  76. requestUrl := `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s`
  77. requestUrl = fmt.Sprintf(requestUrl, utils.PcWxAppId, utils.PcWxAppSecret)
  78. result, err := http.Get(requestUrl)
  79. utils.FileLog.Info("result:%s", string(result))
  80. if err != nil {
  81. return nil, err
  82. }
  83. err = json.Unmarshal(result, &item)
  84. return
  85. }
  86. func InitSetUnionId() {
  87. list, err := models.GetOpenIdAll()
  88. if err != nil {
  89. fmt.Println("err:" + err.Error())
  90. return
  91. }
  92. accessToken := "40_2L4GKbzCZ7qLtlATugEBKBIO6NZJBf4_0O6bHcelPSSSHbgeZhLFyU2jLdLeAP5d_DAinICR2ifS5M_TK-cmGwSKnVz4oa2nnR2UyhD3WbIbvMv3lRbXo06Ujtmwht_gilx_dU26kTHxOKpYDTEjAAAVLW"
  93. for k, v := range list {
  94. fmt.Println(k, v.OpenId)
  95. wxUserInfo, err := WxGetUserInfo(v.OpenId, accessToken)
  96. if err != nil {
  97. fmt.Println("Err:" + err.Error())
  98. return
  99. }
  100. unionId := wxUserInfo.Unionid
  101. if unionId != "" {
  102. err = models.ModifyWxUserUnionId(unionId, v.UserId)
  103. if err != nil {
  104. fmt.Println("ModifyWxUserUnionId Err:" + err.Error())
  105. return
  106. }
  107. }
  108. }
  109. }
  110. type PcWxUserInfo struct {
  111. Openid string `json:"openid"`
  112. Nickname string `json:"nickname"`
  113. Sex int `json:"sex"`
  114. Language string `json:"language"`
  115. City string `json:"city"`
  116. Province string `json:"province"`
  117. Country string `json:"country"`
  118. Headimgurl string `json:"headimgurl"`
  119. Unionid string `json:"unionid"`
  120. Errcode int `json:"errcode"`
  121. Errmsg string `json:"errmsg"`
  122. }
  123. func PcWxGetUserInfo(openId, accessToken string) (item *PcWxUserInfo, err error) {
  124. requestUrl := `https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s`
  125. requestUrl = fmt.Sprintf(requestUrl, accessToken, openId)
  126. result, err := http.Get(requestUrl)
  127. if err != nil {
  128. return
  129. }
  130. fmt.Println("result:",string(result))
  131. utils.FileLog.Info("WxGetUserInfo:%s openId:%s,accessToken:%s ", string(result), openId, accessToken)
  132. utils.FileLog.Info("WxGetUserInfo Result:%s ", string(result))
  133. err = json.Unmarshal(result, &item)
  134. return
  135. }