小程序开发中,访问令牌是调用各类后端接口的身份凭证,普通令牌有效期短,频繁刷新会影响用户体验。stable_token接口可以返回长期有效的稳定令牌,下面我们来看看具体的调用方法。

前置准备
在调用stable_token接口前,需要先完成以下准备工作:
- 拥有已认证的小程序账号,在后台获取小程序的
appid和appsecret - 确认小程序后台已开通stable_token接口的使用权限
- 准备好后端服务环境,因为小程序端不能直接调用该接口,需要通过后端转发
接口调用流程
stable_token接口的调用整体分为三步:
- 小程序端向后端服务发起获取令牌的请求
- 后端服务携带小程序的appid和appsecret调用微信的stable_token接口
- 后端将获取到的稳定令牌返回给小程序端,小程序端存储后用于后续接口调用
参数说明
stable_token接口的请求参数和返回参数如下:
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| grant_type | string | 是 | 固定值client_credential |
| appid | string | 是 | 小程序的唯一标识 |
| secret | string | 是 | 小程序的密钥 |
| stable_token | string | 是 | 固定值1,标识获取稳定令牌 |
| access_token | string | 否 | 之前获取的稳定令牌,用于刷新时传入 |
代码示例
后端Node.js调用示例
// 引入axios用于发送请求
const axios = require('axios');
/**
* 获取小程序stable_token
* @param {string} appid - 小程序appid
* @param {string} secret - 小程序appsecret
* @param {string} oldToken - 旧的稳定令牌,首次获取可不传
* @returns {Promise<object>} 包含稳定令牌的结果
*/
async function getStableToken(appid, secret, oldToken = '') {
const url = 'https://api.weixin.qq.com/cgi-bin/stable_token';
const params = {
grant_type: 'client_credential',
appid: appid,
secret: secret,
stable_token: '1'
};
// 如果有旧令牌,添加到参数中用于刷新
if (oldToken) {
params.access_token = oldToken;
}
try {
const res = await axios.post(url, params);
return res.data;
} catch (err) {
console.error('获取stable_token失败:', err.message);
throw err;
}
}
// 调用示例
// getStableToken('your_appid', 'your_secret').then(data => console.log(data));小程序端存储令牌示例
/**
* 小程序端获取并存储稳定令牌
*/
function fetchAndSaveToken() {
// 调用自己的后端接口获取令牌
wx.request({
url: 'https://ipipp.com/api/get_stable_token', // 替换为自己的后端地址
method: 'GET',
success: (res) => {
if (res.data.access_token) {
// 存储到本地缓存,有效期设置为令牌的有效期
wx.setStorageSync('stable_access_token', res.data.access_token);
wx.setStorageSync('token_expire_time', Date.now() + res.data.expires_in * 1000);
}
},
fail: (err) => {
console.error('获取令牌失败:', err);
}
});
}
/**
* 获取可用的稳定令牌,过期则重新获取
* @returns {string} 稳定访问令牌
*/
function getAvailableToken() {
const token = wx.getStorageSync('stable_access_token');
const expireTime = wx.getStorageSync('token_expire_time');
// 令牌不存在或者已过期,重新获取
if (!token || Date.now() >= expireTime) {
fetchAndSaveToken();
return '';
}
return token;
}常见问题处理
调用stable_token接口时可能会遇到以下问题:
- 返回40001错误:检查appid或appsecret是否正确,是否有接口调用权限
- 返回40002错误:检查grant_type参数是否为固定值client_credential
- 令牌频繁失效:确认是否正确传入了旧的access_token进行刷新,避免重复获取新令牌
- 小程序端无法直接调用:该接口仅支持后端调用,不要尝试在小程序端直接请求微信接口域名
注意:stable_token接口返回的令牌虽然有效期较长,但仍建议定期校验有效期,在过期前主动刷新,避免影响业务接口调用。
小程序stable_token访问令牌接口调用修改时间:2026-05-31 05:06:39