| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package urlscheme
- import (
- "fmt"
- "github.com/silenceper/wechat/v2/miniprogram/context"
- "github.com/silenceper/wechat/v2/util"
- )
- // URLScheme 小程序 URL Scheme
- type URLScheme struct {
- *context.Context
- }
- // NewURLScheme 实例化
- func NewURLScheme(ctx *context.Context) *URLScheme {
- return &URLScheme{Context: ctx}
- }
- const (
- // generateURL 获取加密scheme码
- generateURL = "https://api.weixin.qq.com/wxa/generatescheme"
- // generateNFCURL 获取 NFC 的小程序 scheme
- generateNFCURL = "https://api.weixin.qq.com/wxa/generatenfcscheme?access_token=%s"
- )
- // 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 跳转到的目标小程序信息
- type JumpWxa struct {
- Path string `json:"path"`
- Query string `json:"query"`
- // envVersion 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
- EnvVersion EnvVersion `json:"env_version,omitempty"`
- }
- // USParams 请求参数
- // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generate.html#请求参数
- type USParams struct {
- JumpWxa *JumpWxa `json:"jump_wxa,omitempty"`
- ExpireType TExpireType `json:"expire_type,omitempty"`
- ExpireTime int64 `json:"expire_time,omitempty"`
- ExpireInterval int `json:"expire_interval,omitempty"`
- IsExpire bool `json:"is_expire,omitempty"`
- ModelID string `json:"model_id,omitempty"`
- Sn string `json:"sn,omitempty"`
- }
- // USResult 返回的结果
- // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generate.html#返回值
- type USResult struct {
- util.CommonError
- OpenLink string `json:"openlink"`
- }
- // Generate 生成url link
- func (u *URLScheme) Generate(params *USParams) (string, error) {
- accessToken, err := u.GetAccessToken()
- if err != nil {
- return "", err
- }
- uri := fmt.Sprintf("%s?access_token=%s", generateURL, accessToken)
- response, err := util.PostJSON(uri, params)
- if err != nil {
- return "", err
- }
- var resp USResult
- err = util.DecodeWithError(response, &resp, "URLScheme.Generate")
- return resp.OpenLink, err
- }
- // GenerateNFC 获取 NFC 的小程序 scheme
- // see https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-scheme/generateNFCScheme.html
- func (u *URLScheme) GenerateNFC(params *USParams) (string, error) {
- var (
- accessToken string
- err error
- )
- if accessToken, err = u.GetAccessToken(); err != nil {
- return "", err
- }
- var response []byte
- if response, err = util.PostJSON(fmt.Sprintf(generateNFCURL, accessToken), params); err != nil {
- return "", err
- }
- result := &USResult{}
- err = util.DecodeWithError(response, result, "URLScheme.GenerateNFC")
- return result.OpenLink, err
- }
|