miniprogram.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package miniprogram
  2. import (
  3. "fmt"
  4. miniContext "github.com/silenceper/wechat/v2/miniprogram/context"
  5. "github.com/silenceper/wechat/v2/miniprogram/urllink"
  6. openContext "github.com/silenceper/wechat/v2/openplatform/context"
  7. "github.com/silenceper/wechat/v2/openplatform/miniprogram/basic"
  8. "github.com/silenceper/wechat/v2/openplatform/miniprogram/component"
  9. )
  10. // MiniProgram 代小程序实现业务
  11. type MiniProgram struct {
  12. AppID string
  13. openContext *openContext.Context
  14. authorizerRefreshToken string
  15. }
  16. // GetAccessToken 获取ak
  17. func (miniProgram *MiniProgram) GetAccessToken() (string, error) {
  18. ak, akErr := miniProgram.openContext.GetAuthrAccessToken(miniProgram.AppID)
  19. if akErr == nil {
  20. return ak, nil
  21. }
  22. if miniProgram.authorizerRefreshToken == "" {
  23. return "", fmt.Errorf("please set the authorizer_refresh_token first")
  24. }
  25. akRes, akResErr := miniProgram.GetComponent().RefreshAuthrToken(miniProgram.AppID, miniProgram.authorizerRefreshToken)
  26. if akResErr != nil {
  27. return "", akResErr
  28. }
  29. return akRes.AccessToken, nil
  30. }
  31. // SetAuthorizerRefreshToken 设置代执操作业务授权账号authorizer_refresh_token
  32. func (miniProgram *MiniProgram) SetAuthorizerRefreshToken(authorizerRefreshToken string) *MiniProgram {
  33. miniProgram.authorizerRefreshToken = authorizerRefreshToken
  34. return miniProgram
  35. }
  36. // NewMiniProgram 实例化
  37. func NewMiniProgram(opCtx *openContext.Context, appID string) *MiniProgram {
  38. return &MiniProgram{
  39. openContext: opCtx,
  40. AppID: appID,
  41. }
  42. }
  43. // GetComponent get component
  44. // 快速注册小程序相关
  45. func (miniProgram *MiniProgram) GetComponent() *component.Component {
  46. return component.NewComponent(miniProgram.openContext)
  47. }
  48. // GetBasic 基础信息设置
  49. func (miniProgram *MiniProgram) GetBasic() *basic.Basic {
  50. return basic.NewBasic(miniProgram.openContext, miniProgram.AppID)
  51. }
  52. // GetURLLink 小程序URL Link接口 调用前需确认已调用 SetAuthorizerRefreshToken 避免由于缓存中 authorizer_access_token 过期执行中断
  53. func (miniProgram *MiniProgram) GetURLLink() *urllink.URLLink {
  54. return urllink.NewURLLink(&miniContext.Context{
  55. AccessTokenHandle: miniProgram,
  56. })
  57. }