query.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package urllink
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/util"
  5. )
  6. const queryURL = "https://api.weixin.qq.com/wxa/query_urllink?access_token=%s"
  7. // ULQueryRequest 查询加密URLLink请求
  8. type ULQueryRequest struct {
  9. URLLink string `json:"url_link"`
  10. QueryType int `json:"query_type"`
  11. }
  12. // ULQueryResult 返回的结果
  13. // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.query.html 返回值
  14. type ULQueryResult struct {
  15. util.CommonError
  16. URLLinkInfo struct {
  17. Appid string `json:"appid"`
  18. Path string `json:"path"`
  19. Query string `json:"query"`
  20. CreateTime int64 `json:"create_time"`
  21. ExpireTime int64 `json:"expire_time"`
  22. EnvVersion string `json:"env_version"`
  23. CloudBase struct {
  24. Env string `json:"env"`
  25. Domain string `json:"domain"`
  26. Path string `json:"path"`
  27. Query string `json:"query"`
  28. ResourceAppid string `json:"resource_appid"`
  29. } `json:"cloud_base"`
  30. } `json:"url_link_info"`
  31. VisitOpenid string `json:"visit_openid"`
  32. QuotaInfo QuotaInfo `json:"quota_info"`
  33. }
  34. // QuotaInfo quota 配置
  35. type QuotaInfo struct {
  36. RemainVisitQuota int64 `json:"remain_visit_quota"`
  37. }
  38. // Query 查询小程序 url_link 配置。
  39. func (u *URLLink) Query(urlLink string) (*ULQueryResult, error) {
  40. return u.QueryWithType(&ULQueryRequest{URLLink: urlLink})
  41. }
  42. // QueryWithType 查询加密URLLink
  43. // see https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-link/queryUrlLink.html
  44. func (u *URLLink) QueryWithType(req *ULQueryRequest) (*ULQueryResult, error) {
  45. var (
  46. accessToken string
  47. err error
  48. )
  49. if accessToken, err = u.GetAccessToken(); err != nil {
  50. return nil, err
  51. }
  52. var response []byte
  53. if response, err = util.PostJSON(fmt.Sprintf(queryURL, accessToken), req); err != nil {
  54. return nil, err
  55. }
  56. result := &ULQueryResult{}
  57. err = util.DecodeWithError(response, result, "URLLink.Query")
  58. return result, err
  59. }