From e4a02b4bb5ba03b9f31b919532befaf34aaf3968 Mon Sep 17 00:00:00 2001 From: jiangyong Date: Mon, 28 Sep 2026 11:38:29 +0800 Subject: [PATCH] tick --- qyweixin/app.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/qyweixin/app.go b/qyweixin/app.go index 90148d3..4a7418a 100644 --- a/qyweixin/app.go +++ b/qyweixin/app.go @@ -87,6 +87,8 @@ type AppConfig struct { type App struct { tokenExpire int64 token string + tick string + tickExpire int64 config *AppConfig } @@ -109,6 +111,14 @@ func (q *App) GetToken() string { return q.token } +func (q *App) GetTick() string { + if time.Now().Unix() <= q.tickExpire-600 { + return q.tick + } + q.refreshTick() + return q.tick +} + func (q *App) GetResult(rspBody []byte) (map[string]interface{}, error) { result := make(map[string]interface{}) if err := json.Unmarshal(rspBody, &result); err != nil { @@ -458,6 +468,27 @@ func (q *App) refreshToken() error { return nil } +func (q *App) refreshTick() error { + if time.Now().Unix() <= q.tickExpire-600 { + return nil + } + + resp, err := http.Get("https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token=" + q.GetToken() + "&type=agent_config") + if err != nil { + return err + } + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + if err != nil { + return err + } + jsonData := make(map[string]interface{}) + json.Unmarshal(body, &jsonData) + q.tick = cast.ToString(jsonData["ticket"]) + q.tickExpire = time.Now().Unix() + cast.ToInt64(jsonData["expires_in"]) + return nil +} + func (q *App) UpdateMenu(menu string) error { reqUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token=%s&agentid=%s", q.GetToken(), q.config.Agent) rspBody, err := util.HttpPostJson(reqUrl, nil, []byte(menu))