参考文档
https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject
原理分析
我们在使用小程序wx.login
API进行登录的时候,是不能获取更多的信息的,如openid。
官方提示,需要发送获取到的code进行请求到微信的后端API,才能正确获取更多信息,这也许是为了安全起见吧。
但是我们很多时候,都要求判断登录的用户是不是唯一的,这也就需要使用微信账号唯一的openid来验证了。
不多说,根据文档,得出,只需要进行一个get请求到如下地址即可:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
appid
和secret
在微信小程序后台可以看到,js_code
为使用wx.login
登录时获取到的code
参数数据,grant_type
这个不用改动。
所以,我们直接来实现吧!
简单实现
这里,我使用Parse.Cloud
脚本来实现,具体的其他代码,自行参考:
const APPID = "自行修改";
const SECRET = "自行修改";
Parse.Cloud.define('getOpenId', (req, res) => {
const { code } = req.params;
if (!code || (typeof code !== 'string') || code.length !== 32) {
return res.error({
message: 'code格式不正确',
result: false
})
}
Parse.Cloud.httpRequest({
url: `https://api.weixin.qq.com/sns/jscode2session?appid=${APPID}&secret=${SECRET}&js_code=${code}&grant_type=authorization_code`,
success: (_) => {
const { data } = _;
if (data.errcode) {
return res.success({
result: false,
error: data,
message: '获取失败'
})
}
res.success({
result: _.data,
message: '获取成功'
});
},
error: (_) => {
res.success({
result: false,
error: _,
message: '获取错误'
})
}
})
});
然后前端(也就是微信小程序里边),直接把code
参数传入即可:
Parse.Cloud.run('getOpenId', {
code: "003Vq34S115jF91vhi4S1Cn14S1Vq333"
}, (ret) => {
console.info(ret)
});
网友评论