From d5e7c8043e9b4d3cbf5a28ed2a540fdac7277ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E7=8E=B0=E5=B3=B0?= <15226930941@163.com> Date: Sat, 23 Apr 2022 22:18:14 +0800 Subject: [PATCH] feat:add urlscheme.query (#553) * add:urlscheme-query * add:urlscheme-query Co-authored-by: caoxianfeng --- miniprogram/urlscheme/query.go | 70 ++++++++++++++++++++++++++++++ miniprogram/urlscheme/urlscheme.go | 13 +++++- 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 miniprogram/urlscheme/query.go diff --git a/miniprogram/urlscheme/query.go b/miniprogram/urlscheme/query.go new file mode 100644 index 0000000..d9ff481 --- /dev/null +++ b/miniprogram/urlscheme/query.go @@ -0,0 +1,70 @@ +package urlscheme + +import ( + "fmt" + + "github.com/silenceper/wechat/v2/util" +) + +const ( + querySchemeURL = "https://api.weixin.qq.com/wxa/queryscheme?access_token=%s" +) + +// QueryScheme 获取小程序访问scheme +// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.query.html#参数 +type QueryScheme struct { + // 小程序 scheme 码 + Scheme string `json:"scheme"` +} + +// SchemeInfo scheme 配置 +type SchemeInfo struct { + // 小程序 appid。 + AppID string `json:"appid"` + // 小程序页面路径。 + Path string `json:"path"` + // 小程序页面query。 + Query string `json:"query"` + // 创建时间,为 Unix 时间戳。 + CreateTime int64 `json:"create_time"` + // 到期失效时间,为 Unix 时间戳,0 表示永久生效 + ExpireTime int64 `json:"expire_time"` + // 要打开的小程序版本。正式版为"release",体验版为"trial",开发版为"develop"。 + EnvVersion EnvVersion `json:"env_version"` +} + +// resQueryScheme 返回结构体 +// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.query.html#参数 +type resQueryScheme struct { + // 通用错误 + *util.CommonError + // scheme 配置 + SchemeInfo SchemeInfo `json:"scheme_info"` + // 访问该链接的openid,没有用户访问过则为空字符串 + VisitOpenid string `json:"visit_openid"` +} + +// QueryScheme 查询小程序 scheme 码 +func (u *URLScheme) QueryScheme(querySchemeParams QueryScheme) (schemeInfo SchemeInfo, visitOpenid string, err error) { + var accessToken string + accessToken, err = u.GetAccessToken() + if err != nil { + return + } + + urlStr := fmt.Sprintf(querySchemeURL, accessToken) + var response []byte + response, err = util.PostJSON(urlStr, querySchemeParams) + if err != nil { + return + } + + // 使用通用方法返回错误 + var res resQueryScheme + err = util.DecodeWithError(response, &res, "QueryScheme") + if err != nil { + return + } + + return res.SchemeInfo, res.VisitOpenid, nil +} diff --git a/miniprogram/urlscheme/urlscheme.go b/miniprogram/urlscheme/urlscheme.go index 8ba8d36..37bcd75 100644 --- a/miniprogram/urlscheme/urlscheme.go +++ b/miniprogram/urlscheme/urlscheme.go @@ -22,12 +22,21 @@ const generateURL = "https://api.weixin.qq.com/wxa/generatescheme" // TExpireType 失效类型 (指定时间戳/指定间隔) type TExpireType int +// EnvVersion 要打开的小程序版本 +type EnvVersion string + const ( // ExpireTypeTime 指定时间戳后失效 ExpireTypeTime TExpireType = 0 - // ExpireTypeInterval 间隔指定天数后失效 ExpireTypeInterval TExpireType = 1 + + // EnvVersionRelease 正式版为"release" + EnvVersionRelease EnvVersion = "release" + // EnvVersionTrial 体验版为"trial" + EnvVersionTrial EnvVersion = "trial" + // EnvVersionDevelop 开发版为"develop" + EnvVersionDevelop EnvVersion = "develop" ) // JumpWxa 跳转到的目标小程序信息 @@ -35,7 +44,7 @@ type JumpWxa struct { Path string `json:"path"` Query string `json:"query"` // envVersion 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop" - EnvVersion string `json:"env_version,omitempty"` + EnvVersion EnvVersion `json:"env_version,omitempty"` } // USParams 请求参数