我用的axios对接微信api,各位看着自己适配.
获取用户手机号需要两个关键数据
- 后端需要对接微信官方API 获取小程序的token。官方 access_token 有效期为 2小时
- 后端需要拿到前端授权获取手机号的动态令牌

后端代码
- 接收请求


- checkText代码如下:
// 引入axios请求插件
const axios = require('axios');
// 当前token
let cachedAccessToken = null;
// 当前token有效时间
let accessTokenExpiresAt = 0;
// 获取token
async function getStableAccessToken() {
// 如果当前token存在 而且没有过期
if (cachedAccessToken && (Date.now() < accessTokenExpiresAt)) {
// 直接返回token
return cachedAccessToken;
}
// 预定义最大请求获取token次数
const MAX_RETRY = 3;
// 当前请求获取token次数
let retryCount = 0;
// 如果当前请求获取token次数小于最大次数
while (retryCount < MAX_RETRY) {
try {
// 小程序的 APPID
const APPID = '填写你的小程序appid';
// 小程序的 APPSECRET
const APPSECRET = '填写你的小程序密钥';
// 对接微信官方接口 获取token
const apiUrl = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`;
// 发送请求
const response = await axios.get(apiUrl);
// 拿到获取的token
const accessToken = response.data.access_token;
// 缓存 access_token
cachedAccessToken = accessToken;
// 设置当前token的有效时间:当前时间戳 + 7200秒 (官方 access_token 有效期为 2小时)
// 这里存储毫秒级别 所以*1000 方便判断过期时间
accessTokenExpiresAt = Date.now() + (7200 * 1000);
return accessToken;
}
// 异常
catch (error) {
console.log("获取token失败:", error.message);
// 增加错误尝试次数
retryCount++;
}
}
// 如果重试次数达到上限仍然未成功获取 access_token,则抛出错误
console.log("获取token已超过3次,获取失败!");
throw false;
}
// 对接微信官方获取用户手机号
async function getUserPhone(code) {
try {
// 获取token
const accessToken = await getStableAccessToken();
// 预定义对接微信官方接口
const apiUrl = `https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=${accessToken}`;
// 消息内容参数示例,具体参数根据需求填写,这里我们只传递手机号动态令牌即可
const requestData = {
code: code
};
// 发送请求
const response = await axios.post(apiUrl, requestData);
// 返回结果
return response.data;
} catch (error) {
console.error("获取用户手机号失败:", error.message);
throw false;
}
}
module.exports = {
getUserPhone
};
把上面代码粘贴你的实际需求位置,就可以啦!你会发现能获取到用户手机号了!


3万+

被折叠的 条评论
为什么被折叠?



