mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 12:52:27 +08:00
87 lines
2.1 KiB
Go
87 lines
2.1 KiB
Go
package shortlink
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"github.com/silenceper/wechat/v2/miniprogram/context"
|
||
"github.com/silenceper/wechat/v2/util"
|
||
)
|
||
|
||
const (
|
||
generateShortLinkURL = "https://api.weixin.qq.com/wxa/genwxashortlink?access_token=%s"
|
||
)
|
||
|
||
// ShortLink 短链接
|
||
type ShortLink struct {
|
||
*context.Context
|
||
}
|
||
|
||
// NewShortLink 实例
|
||
func NewShortLink(ctx *context.Context) *ShortLink {
|
||
return &ShortLink{ctx}
|
||
}
|
||
|
||
// ShortLinker 请求结构体
|
||
type ShortLinker struct {
|
||
|
||
// pageUrl 通过 Short Link 进入的小程序页面路径,必须是已经发布的小程序存在的页面,可携带 query,最大 1024 个字符
|
||
PageURL string `json:"page_url"`
|
||
|
||
// pageTitle 页面标题,不能包含违法信息,超过 20 字符会用... 截断代替
|
||
PageTitle string `json:"page_title"`
|
||
|
||
// isPermanent 生成的 Short Link 类型,短期有效:false,永久有效:true
|
||
IsPermanent bool `json:"is_permanent,omitempty"`
|
||
}
|
||
|
||
// resShortLinker 返回结构体
|
||
type resShortLinker struct {
|
||
// 通用错误
|
||
util.CommonError
|
||
|
||
// 返回的 shortLink
|
||
Link string `json:"link"`
|
||
}
|
||
|
||
// Generate 生成 shortLink
|
||
func (shortLink *ShortLink) generate(shortLinkParams ShortLinker) (string, error) {
|
||
var accessToken string
|
||
accessToken, err := shortLink.GetAccessToken()
|
||
if err != nil {
|
||
return "", err
|
||
}
|
||
|
||
urlStr := fmt.Sprintf(generateShortLinkURL, accessToken)
|
||
response, err := util.PostJSON(urlStr, shortLinkParams)
|
||
if err != nil {
|
||
return "", err
|
||
}
|
||
|
||
// 使用通用方法返回错误
|
||
var res resShortLinker
|
||
err = util.DecodeWithError(response, &res, "GenerateShortLink")
|
||
if err != nil {
|
||
return "", err
|
||
}
|
||
|
||
return res.Link, nil
|
||
}
|
||
|
||
// GenerateShortLinkPermanent 生成永久 shortLink
|
||
func (shortLink *ShortLink) GenerateShortLinkPermanent(PageURL, pageTitle string) (string, error) {
|
||
return shortLink.generate(ShortLinker{
|
||
PageURL: PageURL,
|
||
PageTitle: pageTitle,
|
||
IsPermanent: true,
|
||
})
|
||
}
|
||
|
||
// GenerateShortLinkTemp 生成临时 shortLink
|
||
func (shortLink *ShortLink) GenerateShortLinkTemp(PageURL, pageTitle string) (string, error) {
|
||
return shortLink.generate(ShortLinker{
|
||
PageURL: PageURL,
|
||
PageTitle: pageTitle,
|
||
IsPermanent: false,
|
||
})
|
||
}
|