|
@@ -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
|
|
|
|
|
+}
|