shortlink.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package shortlink
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/miniprogram/context"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. const (
  8. generateShortLinkURL = "https://api.weixin.qq.com/wxa/genwxashortlink?access_token=%s"
  9. )
  10. // ShortLink 短链接
  11. type ShortLink struct {
  12. *context.Context
  13. }
  14. // NewShortLink 实例
  15. func NewShortLink(ctx *context.Context) *ShortLink {
  16. return &ShortLink{ctx}
  17. }
  18. // ShortLinker 请求结构体
  19. type ShortLinker struct {
  20. // pageUrl 通过 Short Link 进入的小程序页面路径,必须是已经发布的小程序存在的页面,可携带 query,最大 1024 个字符
  21. PageURL string `json:"page_url"`
  22. // pageTitle 页面标题,不能包含违法信息,超过 20 字符会用... 截断代替
  23. PageTitle string `json:"page_title"`
  24. // isPermanent 生成的 Short Link 类型,短期有效:false,永久有效:true
  25. IsPermanent bool `json:"is_permanent,omitempty"`
  26. }
  27. // resShortLinker 返回结构体
  28. type resShortLinker struct {
  29. // 通用错误
  30. util.CommonError
  31. // 返回的 shortLink
  32. Link string `json:"link"`
  33. }
  34. // Generate 生成 shortLink
  35. func (shortLink *ShortLink) generate(shortLinkParams ShortLinker) (string, error) {
  36. var accessToken string
  37. accessToken, err := shortLink.GetAccessToken()
  38. if err != nil {
  39. return "", err
  40. }
  41. urlStr := fmt.Sprintf(generateShortLinkURL, accessToken)
  42. response, err := util.PostJSON(urlStr, shortLinkParams)
  43. if err != nil {
  44. return "", err
  45. }
  46. // 使用通用方法返回错误
  47. var res resShortLinker
  48. err = util.DecodeWithError(response, &res, "GenerateShortLink")
  49. if err != nil {
  50. return "", err
  51. }
  52. return res.Link, nil
  53. }
  54. // GenerateShortLinkPermanent 生成永久 shortLink
  55. func (shortLink *ShortLink) GenerateShortLinkPermanent(PageURL, pageTitle string) (string, error) {
  56. return shortLink.generate(ShortLinker{
  57. PageURL: PageURL,
  58. PageTitle: pageTitle,
  59. IsPermanent: true,
  60. })
  61. }
  62. // GenerateShortLinkTemp 生成临时 shortLink
  63. func (shortLink *ShortLink) GenerateShortLinkTemp(PageURL, pageTitle string) (string, error) {
  64. return shortLink.generate(ShortLinker{
  65. PageURL: PageURL,
  66. PageTitle: pageTitle,
  67. IsPermanent: false,
  68. })
  69. }