token.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package wechat
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_api/models"
  7. "hongze/hongze_api/services/alarm_msg"
  8. "hongze/hongze_api/utils"
  9. "io/ioutil"
  10. "net/http"
  11. "strings"
  12. )
  13. type WxTokenReq struct {
  14. WxAppId string `description:"公众号appId"`
  15. WxAppSecret string `description:"公众号appSecret"`
  16. }
  17. type WxTokenResp struct {
  18. AccessToken string `description:"微信token"`
  19. }
  20. // GetAccessToken 获取微信token
  21. func GetAccessToken(tokenReq WxTokenReq) (accessToken string, err error, errMsg string) {
  22. if utils.EtaPubUrl == `` {
  23. // 找不到推送服务
  24. return
  25. }
  26. url := fmt.Sprintf("%s/%s", utils.EtaPubUrl, "v1/wechat/access_token")
  27. defer func() {
  28. if err != nil {
  29. go alarm_msg.SendAlarmMsg(errMsg, 1)
  30. }
  31. }()
  32. postData, err := json.Marshal(tokenReq)
  33. if err != nil {
  34. errMsg = "SendTemplateMsg json.Marshal Err:" + err.Error()
  35. return
  36. }
  37. body := ioutil.NopCloser(strings.NewReader(string(postData)))
  38. client := &http.Client{}
  39. req, err := http.NewRequest("POST", url, body)
  40. if err != nil {
  41. errMsg = "SendTemplateMsg http.NewRequest Err:" + err.Error()
  42. return
  43. }
  44. contentType := "application/json;charset=utf-8"
  45. req.Header.Set("Content-Type", contentType)
  46. req.Header.Set("Authorization", utils.EtaPubAuthorization)
  47. resp, err := client.Do(req)
  48. if err != nil {
  49. errMsg = "http client.Do Err:" + err.Error()
  50. return
  51. }
  52. defer resp.Body.Close()
  53. b, err := ioutil.ReadAll(resp.Body)
  54. if err != nil {
  55. errMsg = "ioutil.ReadAll Err:" + err.Error()
  56. return
  57. }
  58. result := new(models.BaseResponse)
  59. err = json.Unmarshal(b, &result)
  60. if err != nil {
  61. errMsg = "json.Unmarshal Err:" + err.Error()
  62. return
  63. }
  64. if result.Ret != 200 {
  65. err = errors.New(string(b))
  66. errMsg = "请求失败:" + err.Error()
  67. return
  68. }
  69. data := result.Data.(WxTokenResp)
  70. accessToken = data.AccessToken
  71. if accessToken == "" {
  72. err = errors.New("请求accessToken失败")
  73. errMsg = "请求accessToken失败"
  74. return
  75. }
  76. return
  77. }