diff --git a/miniprogram/miniprogram.go b/miniprogram/miniprogram.go index af098f0..6741574 100644 --- a/miniprogram/miniprogram.go +++ b/miniprogram/miniprogram.go @@ -15,6 +15,7 @@ import ( "github.com/silenceper/wechat/v2/miniprogram/subscribe" "github.com/silenceper/wechat/v2/miniprogram/tcb" "github.com/silenceper/wechat/v2/miniprogram/urllink" + "github.com/silenceper/wechat/v2/miniprogram/urlscheme" "github.com/silenceper/wechat/v2/miniprogram/werun" ) @@ -102,3 +103,8 @@ func (miniProgram *MiniProgram) GetURLLink() *urllink.URLLink { func (miniProgram *MiniProgram) GetShortLink() *shortlink.ShortLink { return shortlink.NewShortLink(miniProgram.ctx) } + +// GetSURLScheme 小程序URL Scheme接口 +func (miniProgram *MiniProgram) GetSURLScheme() *urlscheme.URLScheme { + return urlscheme.NewURLScheme(miniProgram.ctx) +} diff --git a/miniprogram/urlscheme/urlscheme.go b/miniprogram/urlscheme/urlscheme.go new file mode 100644 index 0000000..8ba8d36 --- /dev/null +++ b/miniprogram/urlscheme/urlscheme.go @@ -0,0 +1,76 @@ +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 = "https://api.weixin.qq.com/wxa/generatescheme" + +// TExpireType 失效类型 (指定时间戳/指定间隔) +type TExpireType int + +const ( + // ExpireTypeTime 指定时间戳后失效 + ExpireTypeTime TExpireType = 0 + + // ExpireTypeInterval 间隔指定天数后失效 + ExpireTypeInterval TExpireType = 1 +) + +// JumpWxa 跳转到的目标小程序信息 +type JumpWxa struct { + Path string `json:"path"` + Query string `json:"query"` + // envVersion 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop" + EnvVersion string `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"` + ExpireType TExpireType `json:"expire_type"` + ExpireTime int64 `json:"expire_time"` + ExpireInterval int `json:"expire_interval"` +} + +// 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") + if err != nil { + return "", err + } + return resp.OpenLink, nil +}