query.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. }
  15. // SchemeInfo scheme 配置
  16. type SchemeInfo struct {
  17. // 小程序 appid。
  18. AppID string `json:"appid"`
  19. // 小程序页面路径。
  20. Path string `json:"path"`
  21. // 小程序页面query。
  22. Query string `json:"query"`
  23. // 创建时间,为 Unix 时间戳。
  24. CreateTime int64 `json:"create_time"`
  25. // 到期失效时间,为 Unix 时间戳,0 表示永久生效
  26. ExpireTime int64 `json:"expire_time"`
  27. // 要打开的小程序版本。正式版为"release",体验版为"trial",开发版为"develop"。
  28. EnvVersion EnvVersion `json:"env_version"`
  29. }
  30. // resQueryScheme 返回结构体
  31. // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.query.html#参数
  32. type resQueryScheme struct {
  33. // 通用错误
  34. *util.CommonError
  35. // scheme 配置
  36. SchemeInfo SchemeInfo `json:"scheme_info"`
  37. // 访问该链接的openid,没有用户访问过则为空字符串
  38. VisitOpenid string `json:"visit_openid"`
  39. }
  40. // QueryScheme 查询小程序 scheme 码
  41. func (u *URLScheme) QueryScheme(querySchemeParams QueryScheme) (schemeInfo SchemeInfo, visitOpenid string, err error) {
  42. var accessToken string
  43. accessToken, err = u.GetAccessToken()
  44. if err != nil {
  45. return
  46. }
  47. urlStr := fmt.Sprintf(querySchemeURL, accessToken)
  48. var response []byte
  49. response, err = util.PostJSON(urlStr, querySchemeParams)
  50. if err != nil {
  51. return
  52. }
  53. // 使用通用方法返回错误
  54. var res resQueryScheme
  55. err = util.DecodeWithError(response, &res, "QueryScheme")
  56. if err != nil {
  57. return
  58. }
  59. return res.SchemeInfo, res.VisitOpenid, nil
  60. }