From e3097efa24b544b8b1c396796932b213250b14b9 Mon Sep 17 00:00:00 2001 From: wangfuduo Date: Sat, 29 Aug 2026 15:49:44 +0800 Subject: [PATCH] feat: add wx mp encrypt url --- weixin/base.go | 1 + weixin/mp_sdk.go | 61 ++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/weixin/base.go b/weixin/base.go index 17f4092..5a9024d 100644 --- a/weixin/base.go +++ b/weixin/base.go @@ -20,6 +20,7 @@ const ( userPhoneNumberUrl string = "https://api.weixin.qq.com/wxa/business/getuserphonenumber" getWxACodeUnLimitUrl string = "https://api.weixin.qq.com/wxa/getwxacodeunlimit" getWxScheme string = "https://api.weixin.qq.com/wxa/generatescheme" + getWxUrlLink string = "https://api.weixin.qq.com/wxa/generate_urllink" code2UserinfoUrl string = "https://api.weixin.qq.com/sns/userinfo" oaQrCodeCreateUrl string = "https://api.weixin.qq.com/cgi-bin/qrcode/create" userInfoByOpenid string = "https://api.weixin.qq.com/cgi-bin/user/info" diff --git a/weixin/mp_sdk.go b/weixin/mp_sdk.go index 64ee484..d6c5fa5 100644 --- a/weixin/mp_sdk.go +++ b/weixin/mp_sdk.go @@ -2,13 +2,15 @@ package weixin import ( "bytes" + "cmp" "encoding/json" "errors" "fmt" - "github.com/spf13/cast" - "github.com/tidwall/gjson" "io" "net/http" + + "github.com/spf13/cast" + "github.com/tidwall/gjson" ) type MpSdk struct { @@ -151,3 +153,58 @@ func (o *MpSdk) GetScheme(params map[string]interface{}) (string, error) { } return g.Get("openlink").String(), nil } + +func (o *MpSdk) GetEncryptUrl(params map[string]any) (string, error) { + newParams := map[string]any{ + "env_version": cmp.Or(cast.ToString(params["env_version"]), "release"), + } + if path := cast.ToString(params["path"]); path != "" { + newParams["path"] = path + } + if query := cast.ToString(params["query"]); query != "" { + newParams["query"] = query + } + + _, hasExpireType := params["expire_type"] + _, hasExpireTime := params["expire_time"] + _, hasExpireInterval := params["expire_interval"] + if hasExpireType { + newParams["expire_type"] = cast.ToInt(params["expire_type"]) + } else if hasExpireInterval { + newParams["expire_type"] = 1 + } else if hasExpireTime { + newParams["expire_type"] = 0 + } + if hasExpireTime { + newParams["expire_time"] = cast.ToInt64(params["expire_time"]) + } + if hasExpireInterval { + newParams["expire_interval"] = cast.ToInt(params["expire_interval"]) + } + + marshal, err := json.Marshal(newParams) + if err != nil { + return "", err + } + accessToken, err := o.getAccessToken() + if err != nil { + return "", err + } + url := fmt.Sprintf("%s?access_token=%s", getWxUrlLink, accessToken) + res, err := http.Post(url, "application/json", bytes.NewBuffer(marshal)) + if err != nil { + return "", err + } + defer res.Body.Close() + body, err := io.ReadAll(res.Body) + if err != nil { + return "", err + } + + g := gjson.ParseBytes(body) + errcode := g.Get("errcode").Int() + if errcode != 0 { + return "", fmt.Errorf("%d:%s", errcode, g.Get("errmsg")) + } + return g.Get("url_link").String(), nil +} -- 2.40.1