token.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package service
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/util/gconv"
  6. "time"
  7. )
  8. type (
  9. tokenResData struct {
  10. Token string `json:"token"`
  11. ExpiresIn int `json:"expiresIn"` //一天有效期
  12. }
  13. tripartite struct {
  14. token string
  15. effectiveTime time.Time
  16. }
  17. )
  18. var (
  19. JyElectronicTripartite = createTripartite()
  20. )
  21. func createTripartite() *tripartite {
  22. t := &tripartite{}
  23. _, err := t.GetToken(true)
  24. if err != nil {
  25. g.Log().Errorf(context.Background(), "刷新token异常%v", err)
  26. }
  27. return t
  28. }
  29. // GetToken 获取token
  30. func (t *tripartite) GetToken(reload ...bool) (string, error) {
  31. var (
  32. ctx = context.Background()
  33. )
  34. if time.Now().Before(t.effectiveTime) && t.token != "" && len(reload) == 0 {
  35. return t.token, nil
  36. }
  37. err := CommonDoPost("/authority_token/getToken",
  38. getDefaultFormHeader(),
  39. g.MapStrAny{
  40. "client_id": g.Cfg().MustGet(ctx, "tripartite.clientId"),
  41. "client_secret": g.Cfg().MustGet(ctx, "tripartite.clientSecret"),
  42. },
  43. func(i interface{}) error {
  44. var d tokenResData
  45. if err := gconv.Struct(i, &d); err != nil {
  46. return err
  47. }
  48. t.token = d.Token
  49. t.effectiveTime = time.Now().Add(time.Second * time.Duration(d.ExpiresIn))
  50. return nil
  51. })
  52. if err != nil {
  53. return "", err
  54. }
  55. return t.token, nil
  56. }