basic.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package basic
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/officialaccount/context"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. var (
  8. // 获取微信服务器IP地址
  9. // 文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_the_WeChat_server_IP_address.html
  10. getCallbackIPURL = "https://api.weixin.qq.com/cgi-bin/getcallbackip"
  11. getAPIDomainIPURL = "https://api.weixin.qq.com/cgi-bin/get_api_domain_ip"
  12. // 清理接口调用次数
  13. clearQuotaURL = "https://api.weixin.qq.com/cgi-bin/clear_quota"
  14. )
  15. // Basic struct
  16. type Basic struct {
  17. *context.Context
  18. }
  19. // NewBasic 实例
  20. func NewBasic(context *context.Context) *Basic {
  21. basic := new(Basic)
  22. basic.Context = context
  23. return basic
  24. }
  25. // IPListRes 获取微信服务器IP地址 返回结果
  26. type IPListRes struct {
  27. util.CommonError
  28. IPList []string `json:"ip_list"`
  29. }
  30. // GetCallbackIP 获取微信callback IP地址
  31. func (basic *Basic) GetCallbackIP() ([]string, error) {
  32. ak, err := basic.GetAccessToken()
  33. if err != nil {
  34. return nil, err
  35. }
  36. url := fmt.Sprintf("%s?access_token=%s", getCallbackIPURL, ak)
  37. data, err := util.HTTPGet(url)
  38. if err != nil {
  39. return nil, err
  40. }
  41. ipListRes := &IPListRes{}
  42. err = util.DecodeWithError(data, ipListRes, "GetCallbackIP")
  43. return ipListRes.IPList, err
  44. }
  45. // GetAPIDomainIP 获取微信API接口 IP地址
  46. func (basic *Basic) GetAPIDomainIP() ([]string, error) {
  47. ak, err := basic.GetAccessToken()
  48. if err != nil {
  49. return nil, err
  50. }
  51. url := fmt.Sprintf("%s?access_token=%s", getAPIDomainIPURL, ak)
  52. data, err := util.HTTPGet(url)
  53. if err != nil {
  54. return nil, err
  55. }
  56. ipListRes := &IPListRes{}
  57. err = util.DecodeWithError(data, ipListRes, "GetAPIDomainIP")
  58. return ipListRes.IPList, err
  59. }
  60. // ClearQuota 清理接口调用次数
  61. func (basic *Basic) ClearQuota() error {
  62. ak, err := basic.GetAccessToken()
  63. if err != nil {
  64. return err
  65. }
  66. url := fmt.Sprintf("%s?access_token=%s", clearQuotaURL, ak)
  67. data, err := util.PostJSON(url, map[string]string{
  68. "appid": basic.AppID,
  69. })
  70. if err != nil {
  71. return err
  72. }
  73. return util.DecodeWithCommonError(data, "ClearQuota")
  74. }