Ver código fonte

feat:获取小程序链接URLScheme (#551)

iceman! 4 anos atrás
pai
commit
538c0b4e5f
2 arquivos alterados com 82 adições e 0 exclusões
  1. 6 0
      miniprogram/miniprogram.go
  2. 76 0
      miniprogram/urlscheme/urlscheme.go

+ 6 - 0
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)
+}

+ 76 - 0
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
+}