85 lines
2.1 KiB
Go
85 lines
2.1 KiB
Go
package basic
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"github.com/silenceper/wechat/v2/officialaccount/context"
|
||
"github.com/silenceper/wechat/v2/util"
|
||
)
|
||
|
||
var (
|
||
// 获取微信服务器IP地址
|
||
// 文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_the_WeChat_server_IP_address.html
|
||
getCallbackIPURL = "https://api.weixin.qq.com/cgi-bin/getcallbackip"
|
||
getAPIDomainIPURL = "https://api.weixin.qq.com/cgi-bin/get_api_domain_ip"
|
||
|
||
// 清理接口调用次数
|
||
clearQuotaURL = "https://api.weixin.qq.com/cgi-bin/clear_quota"
|
||
)
|
||
|
||
// Basic struct
|
||
type Basic struct {
|
||
*context.Context
|
||
}
|
||
|
||
// NewBasic 实例
|
||
func NewBasic(context *context.Context) *Basic {
|
||
basic := new(Basic)
|
||
basic.Context = context
|
||
return basic
|
||
}
|
||
|
||
// IPListRes 获取微信服务器IP地址 返回结果
|
||
type IPListRes struct {
|
||
util.CommonError
|
||
IPList []string `json:"ip_list"`
|
||
}
|
||
|
||
// GetCallbackIP 获取微信callback IP地址
|
||
func (basic *Basic) GetCallbackIP() ([]string, error) {
|
||
ak, err := basic.GetAccessToken()
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
url := fmt.Sprintf("%s?access_token=%s", getCallbackIPURL, ak)
|
||
data, err := util.HTTPGet(url)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
ipListRes := &IPListRes{}
|
||
err = util.DecodeWithError(data, ipListRes, "GetCallbackIP")
|
||
return ipListRes.IPList, err
|
||
}
|
||
|
||
// GetAPIDomainIP 获取微信API接口 IP地址
|
||
func (basic *Basic) GetAPIDomainIP() ([]string, error) {
|
||
ak, err := basic.GetAccessToken()
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
url := fmt.Sprintf("%s?access_token=%s", getAPIDomainIPURL, ak)
|
||
data, err := util.HTTPGet(url)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
ipListRes := &IPListRes{}
|
||
err = util.DecodeWithError(data, ipListRes, "GetAPIDomainIP")
|
||
return ipListRes.IPList, err
|
||
}
|
||
|
||
// ClearQuota 清理接口调用次数
|
||
func (basic *Basic) ClearQuota() error {
|
||
ak, err := basic.GetAccessToken()
|
||
if err != nil {
|
||
return err
|
||
}
|
||
url := fmt.Sprintf("%s?access_token=%s", clearQuotaURL, ak)
|
||
data, err := util.PostJSON(url, map[string]string{
|
||
"appid": basic.AppID,
|
||
})
|
||
if err != nil {
|
||
return err
|
||
}
|
||
return util.DecodeWithCommonError(data, "ClearQuota")
|
||
}
|