package service import ( "context" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" "time" ) type ( tokenResData struct { Token string `json:"token"` ExpiresIn int `json:"expiresIn"` //一天有效期 } tripartite struct { token string effectiveTime time.Time } ) var ( JyElectronicTripartite = createTripartite() ) func createTripartite() *tripartite { t := &tripartite{} _, err := t.GetToken(true) if err != nil { g.Log().Errorf(context.Background(), "刷新token异常%v", err) } return t } // GetToken 获取token func (t *tripartite) GetToken(reload ...bool) (string, error) { var ( ctx = context.Background() ) if time.Now().Before(t.effectiveTime) && t.token != "" && len(reload) == 0 { return t.token, nil } err := CommonDoPost("/authority_token/getToken", getDefaultFormHeader(), g.MapStrAny{ "client_id": g.Cfg().MustGet(ctx, "tripartite.clientId"), "client_secret": g.Cfg().MustGet(ctx, "tripartite.clientSecret"), }, func(i interface{}) error { var d tokenResData if err := gconv.Struct(i, &d); err != nil { return err } t.token = d.Token t.effectiveTime = time.Now().Add(time.Second * time.Duration(d.ExpiresIn)) return nil }) if err != nil { return "", err } return t.token, nil }