微信小程序获取用户手机号,保姆级,nodejs对接微信api用户手机号。

我用的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
};

把上面代码粘贴你的实际需求位置,就可以啦!你会发现能获取到用户手机号了!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值