urlscheme.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package urlscheme
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/miniprogram/context"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. // URLScheme 小程序 URL Scheme
  8. type URLScheme struct {
  9. *context.Context
  10. }
  11. // NewURLScheme 实例化
  12. func NewURLScheme(ctx *context.Context) *URLScheme {
  13. return &URLScheme{Context: ctx}
  14. }
  15. const generateURL = "https://api.weixin.qq.com/wxa/generatescheme"
  16. // TExpireType 失效类型 (指定时间戳/指定间隔)
  17. type TExpireType int
  18. // EnvVersion 要打开的小程序版本
  19. type EnvVersion string
  20. const (
  21. // ExpireTypeTime 指定时间戳后失效
  22. ExpireTypeTime TExpireType = 0
  23. // ExpireTypeInterval 间隔指定天数后失效
  24. ExpireTypeInterval TExpireType = 1
  25. // EnvVersionRelease 正式版为"release"
  26. EnvVersionRelease EnvVersion = "release"
  27. // EnvVersionTrial 体验版为"trial"
  28. EnvVersionTrial EnvVersion = "trial"
  29. // EnvVersionDevelop 开发版为"develop"
  30. EnvVersionDevelop EnvVersion = "develop"
  31. )
  32. // JumpWxa 跳转到的目标小程序信息
  33. type JumpWxa struct {
  34. Path string `json:"path"`
  35. Query string `json:"query"`
  36. // envVersion 要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
  37. EnvVersion EnvVersion `json:"env_version,omitempty"`
  38. }
  39. // USParams 请求参数
  40. // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generate.html#请求参数
  41. type USParams struct {
  42. JumpWxa *JumpWxa `json:"jump_wxa"`
  43. ExpireType TExpireType `json:"expire_type"`
  44. ExpireTime int64 `json:"expire_time"`
  45. ExpireInterval int `json:"expire_interval"`
  46. }
  47. // USResult 返回的结果
  48. // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generate.html#返回值
  49. type USResult struct {
  50. util.CommonError
  51. OpenLink string `json:"openlink"`
  52. }
  53. // Generate 生成url link
  54. func (u *URLScheme) Generate(params *USParams) (string, error) {
  55. accessToken, err := u.GetAccessToken()
  56. if err != nil {
  57. return "", err
  58. }
  59. uri := fmt.Sprintf("%s?access_token=%s", generateURL, accessToken)
  60. response, err := util.PostJSON(uri, params)
  61. if err != nil {
  62. return "", err
  63. }
  64. var resp USResult
  65. err = util.DecodeWithError(response, &resp, "URLScheme.Generate")
  66. return resp.OpenLink, err
  67. }