ByteNoteByteNote
凭据两小时且刷新重叠五分钟
字

字节笔记本

2026年10月7日 · 约 4 分钟读完

凭据两小时且刷新重叠五分钟

API中转
¥120

公众平台调用接口要用全局凭据。存储至少留五百一十二个字符。有效期大约两小时,再次获取会使上一次失效。有效秒数以返回字段为准,目前是七千二百秒以内的值。不要把两小时写死成永远。

只让一处去刷新

建议用一台中控统一获取和刷新。别的业务向中控要,不要各自请求。各自刷新会互相覆盖,正在用的凭据会突然失效。

刷新要提前做,按返回的秒数算,不要卡在过期那一秒。刷新过程中可以继续把旧凭据发出去。平台保证这段重叠里新旧都能用,对话写的是五分钟。业务因此有时间换成新的。

中控还要有一个被动刷新的入口。业务调用接口发现凭据已经超时,可以反过来要求中控立刻刷新。只有定时器的话,超时之后要空等到下一轮。对话没有给出这个入口的路径,只要求提供。

取凭据的请求和错误码

请求是 GET。地址是 https://api.weixin.qq.com/cgi-bin/token。查询参数三个:grant_type 固定为 client_credential,再加上 appid 和 secret。成功时返回凭据和 expires_in。示例里的秒数是 7200。

失败时返回错误码。对话里出现的包括:负一表示系统忙,稍后重试。零表示成功。四万零一是密钥错误或不属于这个账号。四万零二是 grant_type 不是规定的那个值。四万零一十三是 appid 无效。四万零一六十四是调用方 IP 不在白名单。四万零二四十三是密钥已被冻结。八九五零三是这个 IP 要管理员确认。八九五零一是正在等管理员确认。八九五零六是二十四小时内被拒绝两次,二十四小时内不能再用这个 IP。八九五零七是一小时内被拒绝一次,一小时内不能再用这个 IP。

刷新时旧凭据还能再用五分钟

风险确认的过程是:某 IP 发起调用,平台返回八九五零三,同时给管理员发模板消息。管理员确认之后,用同一 IP 再调用才成功。第一次拒绝后,一小时内这个 IP 不能再试。多次拒绝,这个 IP 可能长期不能调用。对话建议事先跟管理员说清楚,或请管理员打开白名单并把 IP 加进去。调用前要在基本配置里把服务器 IP 写入白名单,否则会失败。小程序不用配置这份额外的白名单。

密钥可以冻结。冻结后用密钥取凭据会得到四万零二四十三。账号本身、第三方授权、云开发不受这句影响。解冻仍在基本配置里做。长期不用密钥时再冻。冻了仍要调用,就不要走这把密钥。

appid 和密钥放在设置与开发的基本配置。要先成为开发者,账号不能处于异常。文章里不写真实密钥。请求示例里的两个值保持占位。

白名单和冻结是两类失败

四万零一六十四和八九五零三都和 IP 有关,处理不同。前者是没进白名单,改名单即可。后者是要管理员点确认,改名单代替不了那次确认。

五分钟重叠只在中控已经拿到新凭据、旧的还没作废干净时存在。业务如果自己又请求了一次,可能把中控刚发出的新凭据作废。所以被动刷新也要打到中控,不要打到平台。

存储五百一十二个字符是下限。返回的凭据比这短,也按这个下限留字段。截断后再拿去调用,会变成另一则密钥或凭据错误,而不是长度错误。对话没有单独的长度错误码。

expires_in 是秒。用它安排下一次刷新,提前量要留出那五分钟重叠还没用完的窗口。提前太多会让旧凭据白扔。提前太少会撞上过期。对话没有规定提前多少秒,只说按有效时间提前。

小程序和公众号都能用这对 appid 和密钥调这个地址。白名单这条只写在公众号的服务器 IP 上。拿小程序的失败去套四万零一六十四之前,先确认自己调的是哪一种账号。

相关文章

分享: