urllink.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package urllink
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/miniprogram/context"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. // URLLink 小程序 URL Link
  8. type URLLink struct {
  9. *context.Context
  10. }
  11. // NewURLLink 实例化
  12. func NewURLLink(ctx *context.Context) *URLLink {
  13. return &URLLink{Context: ctx}
  14. }
  15. const generateURL = "https://api.weixin.qq.com/wxa/generate_urllink"
  16. // TExpireType 失效类型 (指定时间戳/指定间隔)
  17. type TExpireType int
  18. const (
  19. // ExpireTypeTime 指定时间戳后失效
  20. ExpireTypeTime TExpireType = 0
  21. // ExpireTypeInterval 间隔指定天数后失效
  22. ExpireTypeInterval TExpireType = 1
  23. )
  24. // ULParams 请求参数
  25. // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html#请求参数
  26. type ULParams struct {
  27. Path string `json:"path"`
  28. Query string `json:"query"`
  29. IsExpire bool `json:"is_expire"`
  30. ExpireType TExpireType `json:"expire_type"`
  31. ExpireTime int64 `json:"expire_time"`
  32. ExpireInterval int `json:"expire_interval"`
  33. }
  34. // ULResult 返回的结果
  35. // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html#返回值
  36. type ULResult struct {
  37. util.CommonError
  38. URLLink string `json:"url_link"`
  39. }
  40. // Generate 生成url link
  41. func (u *URLLink) Generate(params *ULParams) (string, error) {
  42. accessToken, err := u.GetAccessToken()
  43. if err != nil {
  44. return "", err
  45. }
  46. uri := fmt.Sprintf("%s?access_token=%s", generateURL, accessToken)
  47. response, err := util.PostJSON(uri, params)
  48. if err != nil {
  49. return "", err
  50. }
  51. var resp ULResult
  52. err = util.DecodeWithError(response, &resp, "URLLink.Generate")
  53. if err != nil {
  54. return "", err
  55. }
  56. return resp.URLLink, nil
  57. }