获取小程序用户openid(node.js后端)
需求分析:
openID和sessionKey作为小程序用户的唯一凭证,在微信支付和其他接口等都需要使用,还是很重要的。调用wx.login()获取登录凭证,利用code在后台换取openID和sessionKey,通过node.js的Express框架进行解决。
wx.login(Object object)
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
需求解决:
小程序前端代码:
// 获取用户的openid信息
getOpenId(){
wx.login({
success: res => {
console.log("login success res", res)
// 发送 res.code 到后台换取 openId, sessionKey, unionId
wx.request({
url: app.data.requestHost + "/wxlogin",
data: { code: res.code },
method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
'content-type': 'application/x-www-form-urlencoded'
},// 设置请求的 header
success: function (res) {
console.log('获取用户unionId', res);
},
fail: function () {
console.log("index.js wx.request CheckCallUser fail");
},
complete: function () {
// complete
}
})
}
})
}
node后端代码:
var request = require("request");
const APP_ID = "wxxxxxxxxxxxxxxxxxxxx" //开发者的appid
const APP_SECRET = "essssssssssssssssssssss" //开发者的appsecret 登入小程序公共平台内查看
app.post("/wxlogin", async (req, res,next) => {
console.log("从前台获取来的req.body", req.fields);
// console.log(req);
const code = req.fields.code;
if (code) {
// 根据code进行获取openid
let options = {
method: "POST",
url: "https://api.weixin.qq.com/sns/jscode2session?",
formData: {
appid: APP_ID, //appid
secret: APP_SECRET, //密钥,在小程序后台获取
js_code: code, //用户code
grant_type: "authorization_code",
},
};
request(options, (error, response, body) => {
if (error) {
//请求异常时,返回错误信息
res.json({
status: "error",
});
} else {
let _data = JSON.parse(body);
res.json(_data);
console.log("返回的用户id:", _data);
}
});
}
}
)
问题解决,如果你觉得还可以,请一定记得 关注+点赞+收藏。