微信公众平台调用手册

获取并复用稳定版后台凭证

用自有公众号或服务号的 AppID、AppSecret 换取 stable_token,普通模式不使当前有效凭证失效。

官方资料核对 2026-10-15示例代码,未进行真实接口实测
← 返回平台功能

接入准备

  • 具有自有账号的管理员或开发者权限,已在微信开发者平台核对 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 的终端。按调用步骤保存代码文件,再在同一终端执行。

调用步骤

  1. 01

    在同一终端设置 WX_APP_ID、WX_APP_SECRET。把下方完整 Python 代码保存为 token.py。

  2. 02

    运行 export WX_ACCESS_TOKEN="$(python3 token.py)",只在本机终端保存输出,不把凭证贴入本站。正式服务应按 expires_in 提前缓存刷新。

  3. 03

    本例始终使用 force_refresh=false;后续读取草稿和素材时使用返回的后台 token。

调用 01

获取 stable_token(普通模式)

POST JSON 请求,省略 force_refresh 或填写 false 都是普通模式。完整 Python 代码从环境变量读取敏感字段,不使用请求体中的说明字面量。

POSThttps://api.weixin.qq.com/cgi-bin/stable_token

请求头

Content-Type
application/json

参数说明

参数表可左右滑动,查看完整说明。

字段 / 位置类型 / 必填说明
grant_type请求体string必填固定 client_credential。
appid请求体string必填目标账号 AppID。
secret请求体string必填目标账号 AppSecret。
force_refresh请求体boolean可选false 为普通模式;true 会使上次凭证失效,本例不使用。

调用代码

替换示例 ID 与请求体内容后运行。

Python 3
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。 以下为结构示意,非本站实测结果。

JSON
{
  "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。

核验来源

本站按官方资料整理本场景的必要调用步骤与代码,覆盖范围以本页列出的接口为准。官方资料用于追溯规范及查看变更。

  1. 01
  2. 02
    公众号接口调用额度说明核验日期 2026-10-15
  3. 03
    获取稳定版接口调用凭据核验日期 2026-10-15
  4. 04

微信公众平台的其他调用手册

← 返回微信公众平台的全部功能