authorizer_token.go 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package authorization
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "net/url"
  6. wxerr "gitee.com/yansen_zh/wxcomponent/errors"
  7. "gitee.com/yansen_zh/wxcomponent/utils/request"
  8. )
  9. // AuthorizerTokenParam 获取/刷新接口调用令牌参数
  10. type AuthorizerTokenParam struct {
  11. ComponentAppId string `json:"component_appid"`
  12. AuthorizerAppId string `json:"authorizer_appid"`
  13. AuthorizerRefreshToken string `json:"authorizer_refresh_token"`
  14. }
  15. // AuthorizerTokenResult 获取/刷新接口调用令牌结果
  16. type AuthorizerTokenResult struct {
  17. wxerr.Error
  18. AuthorizerAccessToken string `json:"authorizer_access_token"`
  19. ExpiresIn float64 `json:"expires_in"`
  20. AuthorizerRefreshToken string `json:"authorizer_refresh_token"`
  21. }
  22. const (
  23. apiAuthorizerToken = "https://apies.weixin.qq.com/cgi-bin/component/api_authorizer_token"
  24. )
  25. // AuthorizerToken 获取/刷新接口调用令牌
  26. func AuthorizerToken(componentAccessToken string, data AuthorizerTokenParam) (*AuthorizerTokenResult, error) {
  27. if componentAccessToken == "" {
  28. return nil, errors.New("获取/刷新接口调用令牌 第三方平台的 component_access_token 不能为空")
  29. }
  30. if data.ComponentAppId == "" {
  31. return nil, errors.New("获取/刷新接口调用令牌 第三方平台的 appid 不能为空")
  32. }
  33. if data.AuthorizerAppId == "" {
  34. return nil, errors.New("获取/刷新接口调用令牌 授权方 appid 不能为空")
  35. }
  36. if data.AuthorizerRefreshToken == "" {
  37. return nil, errors.New("获取/刷新接口调用令牌 刷新令牌 不能为空")
  38. }
  39. queryParam := url.Values{}
  40. queryParam.Set("component_access_token", componentAccessToken)
  41. apiUrl, _ := request.ParseURL(apiAuthorizerToken, &queryParam)
  42. resp, e2 := request.PostJSON(apiUrl.String(), data)
  43. if e2 != nil {
  44. return nil, e2
  45. }
  46. result := AuthorizerTokenResult{}
  47. if err := json.Unmarshal(resp, &result); err != nil {
  48. return nil, err
  49. }
  50. if result.Code != 0 {
  51. return &result, result.Error
  52. }
  53. return &result, nil
  54. }