| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- 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,
- })
- }
|