您的位置:首页 > 移动开发 > 微信开发

小程序填坑之路(四):微信登录获取unionid

2017-11-18 11:53 627 查看
在微信小程序中,因为各种各样的原因我们会需要获取到用户的unionid,但是小程序的wx.login()在一般情况下只能获取到openid,下面就简单来讲一下如何获取unionid以及当中的神坑

微信登录

在此之前,需要将微信开放平台绑定小程序,才可获取unionid

错误示例:

wx.login({
success: res => {
// 登录凭证
let _code = res.code;
if (_code) {
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
data: {
// 小程序注册时生成的appid
'appid': CONFIG.App.ID,
// 小程序注册时生成的secret
'secret': CONFIG.App.SECRET,
// wx.login()返回的登录凭证
'js_code': _code,
// 固定值
'grant_type': 'authorization_code'
},
success: res => {
console.log(res.data.unionid);
}
})
}
},
fail: res => {
wx.showToast({
title: '微信登录失败',
duration: 1500
});
}
});


由以上代码块可知,获取unionid主要分为以下两个步骤:

1. 调用wx.login()获取登录凭证code

2. 通过登录凭证code调用
https://api.weixin.qq.com/sns/jscode2session
接口,获取用户的unionid

注意了前方高能:

上述代码实现,表面上看起来没有什么问题,实际上在手机调试中以及开发工具的调式中也没有什么问题,但是如果你
关闭手机调试
,或者选择开发工具
校验安全域名、TLS 版本以及 HTTPS 证书
,你就会懵逼了,发现一直报错
https://api.weixin.qq.com不在合法域名列表内
,当你去微信小程序后台的开发设置中添加这个域名时,你会惊喜的发现
https://api.weixin.qq.com这个域名不能添加
,有木有很惊喜,有木有很意外!!!

解决方法:

将访问
https://api.weixin.qq.com/sns/jscode2session
获取unionid这个步骤交给后台去做,让后台给你返回(只能后台返回)!!!(在正式上线后,客户端是不能访问到
https://api.weixin.qq.com/sns/jscode2session
这个接口的


最后还有一种情况:

同一个微信开放平台下的相同主体的App、公众号、小程序,如果用户已经关注公众号,或者曾经登录过App或公众号,则用户打开小程序时,开发者可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。

所以开发者可以先通过wx.login()获取unionid,如果没有获取到,在调用后台获取unionid的接口,不必每次都直接调用后台获取unionid的接口,效率更高!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息