一、安装request依赖
npm install request --save
二、在微信公众平台下载解密算法
点击下载
三、通过code获取用户openid
微信登录:获取到openid后返回给前端获取用户信息,然后前端再带着数据请求接口,后台生成token返回给前端登录
获取手机号:前端拿到加密数据后返回给后台,后台通过解密文件进行解密后返回给前端
const request = require('request');
//从微信下载的WXBizDataCrypt解密文件
var WXBizDataCrypt = require('../../utils/WXBizDataCrypt.js')
//全局变量
let appid = "xxxxxx";//自己小程序后台管理的appid,可登录小程序后台查看
let secret = "xxxxxx";//小程序后台管理的secret,可登录小程序后台查看
let grant_type = "authorization_code";// 授权(必填)默认值
let sessionKey = null;
let openid = null;
let code = '';//获取小程序传来的code
//微信获取openid
router.post('/wxGetOpenid', function (req, res) {
if(req.body.code == ''){
res.send($commonJS.returnMsg(0,'','必填项不可为空'));
return;
}
code = req.body.code;
//请求微信端接口获取openid
request("https://api.weixin.qq.com/sns/jscode2session?grant_type="+grant_type+"&appid="+appid+"&secret="+secret+"&js_code="+code, (error, response, body)=>{
if(response.statusCode == 200){
sessionKey = JSON.parse(body).session_key;
openid = JSON.parse(body).openid;
}
})
});
//解密手机号
router.post('/getPhone', (req, res) => {
let reqData = req.body;
let headers = req.headers;
let bizDataCrypt = new wxBizDataCrypt(appid, reqData.sessionKey)
const data = bizDataCrypt.decryptData(reqData.encryptedData, reqData.iv)
if (Object.keys(data).length > 0) {
res.send($commonJS.returnMsg(1,data,'获取手机号码成功'));
} else {
res.send($commonJS.returnMsg(0,'','获取失败,请重新授权'));
}
})