wechat.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_cygx/utils"
  7. "rdluck_tools/http"
  8. "strconv"
  9. "strings"
  10. "time"
  11. )
  12. type WxAccessToken struct {
  13. AccessToken string `json:"access_token"`
  14. ExpiresIn int `json:"expires_in"`
  15. RefreshToken string `json:"refresh_token"`
  16. Openid string `json:"openid"`
  17. Unionid string `json:"unionid"`
  18. Scope string `json:"scope"`
  19. Errcode int `json:"errcode"`
  20. Errmsg string `json:"errmsg"`
  21. }
  22. func WxGetUserOpenIdByCode(code string) (item *WxAccessToken, err error) {
  23. if code == "" {
  24. err = errors.New("code is empty")
  25. return nil, err
  26. }
  27. requestUrl := `https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code`
  28. requestUrl = fmt.Sprintf(requestUrl, utils.WxAppId, utils.WxAppSecret, code)
  29. result, err := http.Get(requestUrl)
  30. if err != nil {
  31. return nil, err
  32. }
  33. err = json.Unmarshal(result, &item)
  34. return
  35. }
  36. //小助手
  37. func WxGetUserOpenIdByCodeXzs(code string) (item *WxAccessToken, err error) {
  38. if code == "" {
  39. err = errors.New("code is empty")
  40. return nil, err
  41. }
  42. requestUrl := `https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code`
  43. requestUrl = fmt.Sprintf(requestUrl, utils.WxAppIdXzs, utils.WxAppSecretXzs, code)
  44. result, err := http.Get(requestUrl)
  45. if err != nil {
  46. return nil, err
  47. }
  48. err = json.Unmarshal(result, &item)
  49. return
  50. }
  51. type WxToken struct {
  52. AccessToken string `json:"access_token"`
  53. ExpiresIn int `json:"expires_in"`
  54. Errcode int `json:"errcode"`
  55. Errmsg string `json:"errmsg"`
  56. }
  57. func WxGetToken() (item *WxToken, err error) {
  58. requestUrl := `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s`
  59. requestUrl = fmt.Sprintf(requestUrl, utils.WxAppId, utils.WxAppSecret)
  60. fmt.Println("requestUrl:", requestUrl)
  61. result, err := http.Get(requestUrl)
  62. if err != nil {
  63. return nil, err
  64. }
  65. err = json.Unmarshal(result, &item)
  66. fmt.Println("WxGetToken start")
  67. fmt.Println(string(result))
  68. fmt.Println("WxGetToken end")
  69. return
  70. }
  71. type WxUserInfo struct {
  72. Openid string `json:"openid"`
  73. Nickname string `json:"nickname"`
  74. Sex int `json:"sex"`
  75. Language string `json:"language"`
  76. City string `json:"city"`
  77. Province string `json:"province"`
  78. Country string `json:"country"`
  79. Headimgurl string `json:"headimgurl"`
  80. SubscribeTime int `json:"subscribe_time"`
  81. Unionid string `json:"unionid"`
  82. Remark string `json:"remark"`
  83. Groupid int `json:"groupid"`
  84. SubscribeScene string `json:"subscribe_scene"`
  85. Errcode int `json:"errcode"`
  86. Errmsg string `json:"errmsg"`
  87. SessionKey string `json:"session_key"`
  88. }
  89. func WxGetUserInfo(openId, accessToken string) (item *WxUserInfo, err error) {
  90. requestUrl := `https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s`
  91. requestUrl = fmt.Sprintf(requestUrl, accessToken, openId)
  92. result, err := http.Get(requestUrl)
  93. if err != nil {
  94. return
  95. }
  96. fmt.Println("result:", string(result))
  97. err = json.Unmarshal(result, &item)
  98. return
  99. }
  100. func GetWxSignature(ticket, url, noncestr string) (string, string, int64) {
  101. timestamp := time.Now().Unix()
  102. signStr := strings.Join([]string{"jsapi_ticket=", ticket,
  103. "&noncestr=", noncestr,
  104. "&timestamp=", strconv.FormatInt(timestamp, 10), "&url=", url}, "")
  105. signature := utils.Sha1(signStr)
  106. fmt.Println("signStr", signStr)
  107. return signature, noncestr, timestamp
  108. }
  109. type WxUserDetail struct {
  110. Unionid string
  111. Headimgurl string
  112. Nickname string
  113. }