微信公众平台调用手册
获取并复用稳定版后台凭证
用自有公众号或服务号的 AppID、AppSecret 换取 stable_token,普通模式不使当前有效凭证失效。
← 返回平台功能接入准备
- 具有自有账号的管理员或开发者权限,已在微信开发者平台核对 AppID、AppSecret 和接口访问权限。
- 把实际服务端出口 IP 加入 API IP 白名单;本例在 Python 3 标准库环境运行,不能嵌到网页前端。
准备环境变量
示例值需要替换为自己的凭证或资源 ID。代码在本机或服务端运行;密钥不应放进公开网页。
WX_APP_ID- 自有公众号或服务号 AppID。
WX_APP_SECRET- 该账号的 AppSecret,只在本机或服务端设置。
export WX_APP_ID='wx_replace_with_your_appid'
export WX_APP_SECRET='REPLACE_WITH_YOUR_APP_SECRET'以上 export 适用于 macOS / Linux 的终端。按调用步骤保存代码文件,再在同一终端执行。
调用步骤
- 01
在同一终端设置 WX_APP_ID、WX_APP_SECRET。把下方完整 Python 代码保存为 token.py。
- 02
运行 export WX_ACCESS_TOKEN="$(python3 token.py)",只在本机终端保存输出,不把凭证贴入本站。正式服务应按 expires_in 提前缓存刷新。
- 03
本例始终使用 force_refresh=false;后续读取草稿和素材时使用返回的后台 token。
调用 01
获取 stable_token(普通模式)
POST JSON 请求,省略 force_refresh 或填写 false 都是普通模式。完整 Python 代码从环境变量读取敏感字段,不使用请求体中的说明字面量。
POST
https://api.weixin.qq.com/cgi-bin/stable_token请求头
Content-Typeapplication/json
参数说明
参数表可左右滑动,查看完整说明。
| 字段 / 位置 | 类型 / 必填 | 说明 |
|---|---|---|
grant_type请求体 | string必填 | 固定 client_credential。 |
appid请求体 | string必填 | 目标账号 AppID。 |
secret请求体 | string必填 | 目标账号 AppSecret。 |
force_refresh请求体 | boolean可选 | false 为普通模式;true 会使上次凭证失效,本例不使用。 |
调用代码
替换示例 ID 与请求体内容后运行。
import json, os, sys, urllib.request, urllib.error
def required(name):
value = os.environ.get(name)
if not value:
raise ValueError("缺少环境变量 " + name)
return value
payload = {"grant_type": "client_credential", "appid": required("WX_APP_ID"),
"secret": required("WX_APP_SECRET"), "force_refresh": False}
request = urllib.request.Request("https://api.weixin.qq.com/cgi-bin/stable_token",
data=json.dumps(payload).encode("utf-8"), method="POST",
headers={"Content-Type": "application/json"})
try:
with urllib.request.urlopen(request, timeout=20) as response:
result = json.load(response)
except urllib.error.HTTPError as error:
raise RuntimeError("HTTP " + str(error.code)) from error
if result.get("errcode", 0) != 0:
raise RuntimeError(str(result.get("errcode")) + ": " + str(result.get("errmsg")))
if not result.get("access_token") or not result.get("expires_in"):
raise RuntimeError("响应缺少凭证或有效期")
# 只把 token 写入当前终端的 stdout,可直接导入环境变量;不要记录到公开日志。
print(result["access_token"])
print("凭证剩余有效期(秒): " + str(result["expires_in"]), file=sys.stderr)
返回示例
成功返回后台 token 与剩余有效秒数,expires_in 不应硬编码为 7200。错误常仍返回 JSON,应检查 errcode。 以下为结构示意,非本站实测结果。
{
"access_token": "ACCESS_TOKEN_EXAMPLE",
"expires_in": 7200
}常见错误与排查
40013 / 40125AppID 或 AppSecret 不正确- 核对账号类型、大小写及密钥是否重置,不能用小程序或开放平台应用的凭证。
40164出口 IP 不在白名单- 核对实际公网出口 IP,在对应账号开发密钥页配置白名单。
89503本次调用需要管理员确认- 由管理员在官方渠道确认该 IP 的调用,不反复请求或绕过确认。
调用注意
- 普通模式有效期内重复调用返回相同 token 及剩余有效期;官方会提前 5 分钟更新。
- 此接口与旧 getAccessToken 获取的 token 互相隔离;强刷每天最多 20 次且至少间隔 30 秒。
- 代码只写一份 token 至 stdout,状态写 stderr;不要启用记录密钥、完整请求体或 token 的调试日志。
注意事项
- 获取凭证不代表高级接口全部授权,具体接口仍核对账号权限。
- 本例没有实现持久化缓存或集群锁;上线时应集中维护 token,避免各服务重复获取。
- 本文未核实当前主体的认证费用和接口实际权限,未执行账号 API。
核验来源
本站按官方资料整理本场景的必要调用步骤与代码,覆盖范围以本页列出的接口为准。官方资料用于追溯规范及查看变更。
- 01开发接口管理迁移与权限管理入口核验日期 2026-10-15
- 02公众号接口调用额度说明核验日期 2026-10-15
- 03获取稳定版接口调用凭据核验日期 2026-10-15
- 04公众号服务端 API 调用说明核验日期 2026-10-15
