|
@@ -1,127 +0,0 @@
|
|
|
-package openapi
|
|
|
|
|
-
|
|
|
|
|
-import (
|
|
|
|
|
- "errors"
|
|
|
|
|
- "fmt"
|
|
|
|
|
-
|
|
|
|
|
- "github.com/silenceper/wechat/v2/domain/openapi"
|
|
|
|
|
- mpContext "github.com/silenceper/wechat/v2/miniprogram/context"
|
|
|
|
|
- ocContext "github.com/silenceper/wechat/v2/officialaccount/context"
|
|
|
|
|
- "github.com/silenceper/wechat/v2/util"
|
|
|
|
|
-)
|
|
|
|
|
-
|
|
|
|
|
-const (
|
|
|
|
|
- clearQuotaURL = "https://api.weixin.qq.com/cgi-bin/clear_quota" // 重置API调用次数
|
|
|
|
|
- getAPIQuotaURL = "https://api.weixin.qq.com/cgi-bin/openapi/quota/get" // 查询API调用额度
|
|
|
|
|
- getRidInfoURL = "https://api.weixin.qq.com/cgi-bin/openapi/rid/get" // 查询rid信息
|
|
|
|
|
- clearQuotaByAppSecretURL = "https://api.weixin.qq.com/cgi-bin/clear_quota/v2" // 使用AppSecret重置 API 调用次数
|
|
|
|
|
-)
|
|
|
|
|
-
|
|
|
|
|
-// OpenAPI openApi管理
|
|
|
|
|
-type OpenAPI struct {
|
|
|
|
|
- ctx interface{}
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// NewOpenAPI 实例化
|
|
|
|
|
-func NewOpenAPI(ctx interface{}) *OpenAPI {
|
|
|
|
|
- return &OpenAPI{ctx: ctx}
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// ClearQuota 重置API调用次数
|
|
|
|
|
-// https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/openApi-mgnt/clearQuota.html
|
|
|
|
|
-func (o *OpenAPI) ClearQuota() error {
|
|
|
|
|
- appID, _, err := o.getAppIDAndSecret()
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- var payload = struct {
|
|
|
|
|
- AppID string `json:"appid"`
|
|
|
|
|
- }{
|
|
|
|
|
- AppID: appID,
|
|
|
|
|
- }
|
|
|
|
|
- res, err := o.doPostRequest(clearQuotaURL, payload)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return util.DecodeWithCommonError(res, "ClearQuota")
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// GetAPIQuota 查询API调用额度
|
|
|
|
|
-// https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/openApi-mgnt/getApiQuota.html
|
|
|
|
|
-func (o *OpenAPI) GetAPIQuota(params openapi.GetAPIQuotaParams) (quota openapi.APIQuota, err error) {
|
|
|
|
|
- res, err := o.doPostRequest(getAPIQuotaURL, params)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- err = util.DecodeWithError(res, "a, "GetAPIQuota")
|
|
|
|
|
- return
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// GetRidInfo 查询rid信息
|
|
|
|
|
-// https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/openApi-mgnt/getRidInfo.html
|
|
|
|
|
-func (o *OpenAPI) GetRidInfo(params openapi.GetRidInfoParams) (r openapi.RidInfo, err error) {
|
|
|
|
|
- res, err := o.doPostRequest(getRidInfoURL, params)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- err = util.DecodeWithError(res, &r, "GetRidInfo")
|
|
|
|
|
- return
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// ClearQuotaByAppSecret 使用AppSecret重置 API 调用次数
|
|
|
|
|
-// https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/openApi-mgnt/clearQuotaByAppSecret.html
|
|
|
|
|
-func (o *OpenAPI) ClearQuotaByAppSecret() error {
|
|
|
|
|
- id, secret, err := o.getAppIDAndSecret()
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- uri := fmt.Sprintf("%s?appid=%s&appsecret=%s", clearQuotaByAppSecretURL, id, secret)
|
|
|
|
|
- res, err := util.HTTPPost(uri, "")
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return util.DecodeWithCommonError(res, "ClearQuotaByAppSecret")
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// 获取 AppID 和 AppSecret
|
|
|
|
|
-func (o *OpenAPI) getAppIDAndSecret() (string, string, error) {
|
|
|
|
|
- switch o.ctx.(type) {
|
|
|
|
|
- case *mpContext.Context:
|
|
|
|
|
- c := o.ctx.(*mpContext.Context)
|
|
|
|
|
- return c.AppID, c.AppSecret, nil
|
|
|
|
|
- case *ocContext.Context:
|
|
|
|
|
- c := o.ctx.(*ocContext.Context)
|
|
|
|
|
- return c.AppID, c.AppSecret, nil
|
|
|
|
|
- default:
|
|
|
|
|
- return "", "", errors.New("invalid context type")
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// 获取 AccessToken
|
|
|
|
|
-func (o *OpenAPI) getAccessToken() (string, error) {
|
|
|
|
|
- switch o.ctx.(type) {
|
|
|
|
|
- case *mpContext.Context:
|
|
|
|
|
- return o.ctx.(*mpContext.Context).GetAccessToken()
|
|
|
|
|
- case *ocContext.Context:
|
|
|
|
|
- return o.ctx.(*ocContext.Context).GetAccessToken()
|
|
|
|
|
- default:
|
|
|
|
|
- return "", errors.New("invalid context type")
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-// 创建 POST 请求
|
|
|
|
|
-func (o *OpenAPI) doPostRequest(uri string, payload interface{}) ([]byte, error) {
|
|
|
|
|
- ak, err := o.getAccessToken()
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- uri = fmt.Sprintf("%s?access_token=%s", uri, ak)
|
|
|
|
|
- return util.PostJSON(uri, payload)
|
|
|
|
|
-}
|
|
|