basic.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. //Basic struct
  14. type Basic struct {
  15. *context.Context
  16. }
  17. //NewBasic 实例
  18. func NewBasic(context *context.Context) *Basic {
  19. basic := new(Basic)
  20. basic.Context = context
  21. return basic
  22. }
  23. //IPListRes 获取微信服务器IP地址 返回结果
  24. type IPListRes struct {
  25. util.CommonError
  26. IPList []string `json:"ip_list"`
  27. }
  28. //GetCallbackIP 获取微信callback IP地址
  29. func (basic *Basic) GetCallbackIP() ([]string, error) {
  30. ak, err := basic.GetAccessToken()
  31. if err != nil {
  32. return nil, err
  33. }
  34. url := fmt.Sprintf("%s?access_token=%s", getCallbackIPURL, ak)
  35. data, err := util.HTTPGet(url)
  36. if err != nil {
  37. return nil, err
  38. }
  39. ipListRes := &IPListRes{}
  40. err = util.DecodeWithError(data, ipListRes, "GetCallbackIP")
  41. return ipListRes.IPList, err
  42. }
  43. //GetAPIDomainIP 获取微信API接口 IP地址
  44. func (basic *Basic) GetAPIDomainIP() ([]string, error) {
  45. ak, err := basic.GetAccessToken()
  46. if err != nil {
  47. return nil, err
  48. }
  49. url := fmt.Sprintf("%s?access_token=%s", getAPIDomainIPURL, ak)
  50. data, err := util.HTTPGet(url)
  51. if err != nil {
  52. return nil, err
  53. }
  54. ipListRes := &IPListRes{}
  55. err = util.DecodeWithError(data, ipListRes, "GetAPIDomainIP")
  56. return ipListRes.IPList, err
  57. }