forked from golang/hotime
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package urllink
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/silenceper/wechat/v2/miniprogram/context"
|
|
"github.com/silenceper/wechat/v2/util"
|
|
)
|
|
|
|
// URLLink 小程序 URL Link
|
|
type URLLink struct {
|
|
*context.Context
|
|
}
|
|
|
|
// NewURLLink 实例化
|
|
func NewURLLink(ctx *context.Context) *URLLink {
|
|
return &URLLink{Context: ctx}
|
|
}
|
|
|
|
const generateURL = "https://api.weixin.qq.com/wxa/generate_urllink"
|
|
|
|
// TExpireType 失效类型 (指定时间戳/指定间隔)
|
|
type TExpireType int
|
|
|
|
const (
|
|
// ExpireTypeTime 指定时间戳后失效
|
|
ExpireTypeTime TExpireType = 0
|
|
|
|
// ExpireTypeInterval 间隔指定天数后失效
|
|
ExpireTypeInterval TExpireType = 1
|
|
)
|
|
|
|
// ULParams 请求参数
|
|
// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html#请求参数
|
|
type ULParams struct {
|
|
Path string `json:"path"`
|
|
Query string `json:"query"`
|
|
// envVersion 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
|
|
EnvVersion string `json:"env_version,omitempty"`
|
|
IsExpire bool `json:"is_expire"`
|
|
ExpireType TExpireType `json:"expire_type"`
|
|
ExpireTime int64 `json:"expire_time"`
|
|
ExpireInterval int `json:"expire_interval"`
|
|
}
|
|
|
|
// ULResult 返回的结果
|
|
// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html#返回值
|
|
type ULResult struct {
|
|
util.CommonError
|
|
|
|
URLLink string `json:"url_link"`
|
|
}
|
|
|
|
// Generate 生成url link
|
|
func (u *URLLink) Generate(params *ULParams) (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 ULResult
|
|
err = util.DecodeWithError(response, &resp, "URLLink.Generate")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return resp.URLLink, nil
|
|
}
|