query.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package urlscheme
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/util"
  5. )
  6. const (
  7. querySchemeURL = "https://api.weixin.qq.com/wxa/queryscheme?access_token=%s"
  8. )
  9. // QueryScheme 获取小程序访问scheme
  10. // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.query.html#参数
  11. type QueryScheme struct {
  12. // 小程序 scheme 码
  13. Scheme string `json:"scheme"`
  14. QueryType int `json:"query_type"`
  15. }
  16. // SchemeInfo scheme 配置
  17. type SchemeInfo struct {
  18. // 小程序 appid。
  19. AppID string `json:"appid"`
  20. // 小程序页面路径。
  21. Path string `json:"path"`
  22. // 小程序页面query。
  23. Query string `json:"query"`
  24. // 创建时间,为 Unix 时间戳。
  25. CreateTime int64 `json:"create_time"`
  26. // 到期失效时间,为 Unix 时间戳,0 表示永久生效
  27. ExpireTime int64 `json:"expire_time"`
  28. // 要打开的小程序版本。正式版为"release",体验版为"trial",开发版为"develop"。
  29. EnvVersion EnvVersion `json:"env_version"`
  30. }
  31. // QuotaInfo quota 配置
  32. type QuotaInfo struct {
  33. RemainVisitQuota int64 `json:"remain_visit_quota"`
  34. }
  35. // ResQueryScheme 返回结构体
  36. // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.query.html#参数
  37. type ResQueryScheme struct {
  38. // 通用错误
  39. util.CommonError
  40. // scheme 配置
  41. SchemeInfo SchemeInfo `json:"scheme_info"`
  42. // 访问该链接的openid,没有用户访问过则为空字符串
  43. VisitOpenid string `json:"visit_openid"`
  44. QuotaInfo QuotaInfo `json:"quota_info"`
  45. }
  46. // QueryScheme 查询小程序 scheme 码
  47. func (u *URLScheme) QueryScheme(querySchemeParams QueryScheme) (schemeInfo SchemeInfo, visitOpenid string, err error) {
  48. res, err := u.QuerySchemeWithRes(querySchemeParams)
  49. if err != nil {
  50. return
  51. }
  52. return res.SchemeInfo, res.VisitOpenid, err
  53. }
  54. // QuerySchemeWithRes 查询scheme码
  55. // see https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-scheme/queryScheme.html
  56. func (u *URLScheme) QuerySchemeWithRes(req QueryScheme) (*ResQueryScheme, error) {
  57. var (
  58. accessToken string
  59. err error
  60. )
  61. if accessToken, err = u.GetAccessToken(); err != nil {
  62. return nil, err
  63. }
  64. var response []byte
  65. if response, err = util.PostJSON(fmt.Sprintf(querySchemeURL, accessToken), req); err != nil {
  66. return nil, err
  67. }
  68. result := &ResQueryScheme{}
  69. err = util.DecodeWithError(response, result, "QueryScheme")
  70. return result, err
  71. }