mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 12:52:27 +08:00
81 lines
2.4 KiB
Go
81 lines
2.4 KiB
Go
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"`
|
||
QueryType int `json:"query_type"`
|
||
}
|
||
|
||
// 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"`
|
||
}
|
||
|
||
// QuotaInfo quota 配置
|
||
type QuotaInfo struct {
|
||
RemainVisitQuota int64 `json:"remain_visit_quota"`
|
||
}
|
||
|
||
// 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"`
|
||
QuotaInfo QuotaInfo `json:"quota_info"`
|
||
}
|
||
|
||
// QueryScheme 查询小程序 scheme 码
|
||
func (u *URLScheme) QueryScheme(querySchemeParams QueryScheme) (schemeInfo SchemeInfo, visitOpenid string, err error) {
|
||
res, err := u.QuerySchemeWithRes(querySchemeParams)
|
||
if err != nil {
|
||
return
|
||
}
|
||
return res.SchemeInfo, res.VisitOpenid, err
|
||
}
|
||
|
||
// QuerySchemeWithRes 查询scheme码
|
||
// see https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-scheme/queryScheme.html
|
||
func (u *URLScheme) QuerySchemeWithRes(req QueryScheme) (*ResQueryScheme, error) {
|
||
var (
|
||
accessToken string
|
||
err error
|
||
)
|
||
if accessToken, err = u.GetAccessToken(); err != nil {
|
||
return nil, err
|
||
}
|
||
var response []byte
|
||
if response, err = util.PostJSON(fmt.Sprintf(querySchemeURL, accessToken), req); err != nil {
|
||
return nil, err
|
||
}
|
||
result := &ResQueryScheme{}
|
||
err = util.DecodeWithError(response, result, "QueryScheme")
|
||
return result, err
|
||
}
|