authorization.go 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /**
  2. * Copyright (c) 2022 Yansen Zhang
  3. * wxcomponent is licensed under Mulan PSL v2.
  4. * You can use this software according to the terms and conditions of the Mulan PSL v2.
  5. * You may obtain a copy of Mulan PSL v2 at:
  6. * http://license.coscl.org.cn/MulanPSL2
  7. * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
  8. * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
  9. * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
  10. * See the Mulan PSL v2 for more details.
  11. **/
  12. package wxcomponent
  13. import (
  14. "gitee.com/yansen_zh/wxcomponent/api/authorization"
  15. "gitee.com/yansen_zh/wxcomponent/config"
  16. "gitee.com/yansen_zh/wxcomponent/utils"
  17. )
  18. // 授权与Token
  19. // VerifyTicket 验证票据
  20. func VerifyTicket(ticket string) error {
  21. expire := utils.GetExpireTime(12 * 3600) // component_verify_ticket 的有效时间为12小时
  22. return config.RefreshVerifyTicket(ticket, expire)
  23. }
  24. // RefreshToken 获取令牌
  25. // 主要是定时任务调用
  26. func RefreshToken() error {
  27. result, err := authorization.GetComponentToken()
  28. if err != nil {
  29. return err
  30. }
  31. token := result.ComponentAccessToken
  32. expire := utils.GetExpireTime(result.ExpiresIn)
  33. if e := config.RefreshToken(token, expire); e != nil {
  34. return e
  35. }
  36. return nil
  37. }
  38. // CreateAuthLink 自建授权链接, client 默认是 PC 端, 如果是移动端, 需要传入 H5。
  39. // url 为需要跳转的结果页, 必须是原始的值, 不能经过 encode 处理.
  40. // appID 为小程序或者公众号ID, 可以不传
  41. func CreateAuthLink(client, url, appID string) (string, error) {
  42. preAuth, err := authorization.CreatePreAuthCode()
  43. if err != nil {
  44. return "", err
  45. }
  46. return authorization.GetAuthLink(client, preAuth.PreAuthCode, url, appID, 3)
  47. }
  48. // RefreshAuthorizerInfo 刷新授权对象信息
  49. func RefreshAuthorizerInfo(authCode string) error {
  50. res, err := authorization.GetQueryAuth(authCode)
  51. if err != nil {
  52. return err
  53. }
  54. authInfo := res.AuthorizationInfo
  55. appID := authInfo.AuthorizerAppID
  56. expire := utils.GetExpireTime(authInfo.ExpiresIn)
  57. funcLst := make([]int, 0)
  58. if nil != authInfo.FuncInfo && len(authInfo.FuncInfo) > 0 {
  59. for _, info := range authInfo.FuncInfo {
  60. funcLst = append(funcLst, info.FuncscopeCategory.ID)
  61. }
  62. }
  63. config.GetAuthorizer().RefreshFuncInfo(appID, funcLst)
  64. if err := config.GetAuthorizer().RefreshToken(appID, authInfo.AuthorizerAccessToken, authInfo.AuthorizerRefreshToken, expire); err != nil {
  65. return err
  66. }
  67. return nil
  68. }
  69. // RefreshAuthorizerToken 刷新接口调用令牌
  70. func RefreshAuthorizerToken(appID string) error {
  71. res, err := authorization.RefreshAuthorizerToken(appID, config.GetAuthorizer().GetRefreshToken(appID))
  72. if err != nil {
  73. return err
  74. }
  75. expire := utils.GetExpireTime(res.ExpiresIn)
  76. if err := config.GetAuthorizer().RefreshToken(appID, res.AuthorizerAccessToken, res.AuthorizerRefreshToken, expire); err != nil {
  77. return err
  78. }
  79. return nil
  80. }
  81. // GetAuthorizerInfo 获取授权帐号信息
  82. func GetAuthorizerInfo(appID string) (*authorization.AuthorizerInfoResult, error) {
  83. return authorization.GetAuthorizerInfo(appID)
  84. }