在微信小程序中,因为各种各样的原因我们会需要获取到用户的openid或者unionid下面就简单来讲一下在小程序中如何获取openid和unionid。
步骤一:微信登录获取登录凭证
wx.login({
success: res => {
// 微信临时登录凭证
let _code = res.code;
// 进行网络访问,将 _code 提交给服务端,服务端返回 openid 和 unionid,
// 服务端对 _code 的处理机制参照 步骤二
......
},
fail: res => {
toast.show({ content: '微信登录失败' });
}
});
调用微信小程序的 wx.login()可以获取到微信登录的临时凭证,此凭证将用于下面获取 openid 以及 unionid
步骤二:将获取的登录凭证提交后台,获取 openid 与 unionid(在服务端获取)
如何使用登录凭证(注意:下方代码仅用于讲解凭证使用方法以及在调试中快捷获取 openid 以及unionid,不可在正式开发中使用)
wx.request({
// 通过此 url ,获取 openid 与 unionid
url: 'https://api.weixin.qq.com/sns/jscode2session',
data: {
// 小程序的appid
'appid': appId,
// 小程序的secret
'secret': appSecret,
// wx.login()返回的登录凭证
'js_code': jscode,
// 固定值,不需要改变
'grant_type': 'authorization_code'
},
success: res => {
// 返回的 openid
console.log(res.data.openid);
// 返回的会话密钥
console.log(res.data.session_key);
// 注意:上面两个字段值必定会返回,unionid 则只会在满足一定条件下返回,不是必定会返回的值
console.log(res.data.unionid);
}
});
注意!注意!注意!===>
1、上方代码,仅仅用于讲述如何通过登录凭证获取 openid 和 unionid 以及在调试中如何快速获取 openid 和unionid,
并不能在正式开发中在客户端使用,微信不支持正式的线上产品访问 'https://api.weixin.qq.com/sns/jscode2session' !!!
2、在正式开发中,必须将获取的登录凭证(js_code)提交给服务端,由服务端访问
'https://api.weixin.qq.com/sns/jscode2session'
获取 openid 和 unionid,在返回给客户端
unionid的获取条件以及其他几种获取方式
上述已经说明,openid是必定能得到的值,unionid则需要满足一定条件才会返回,下面就讲述一下unionid的获取条件以及其他的获取方式!
一、绑定微信开放平台 这一步非常重要,一定要做,因为unionid就是微信开放平台分发下来的,不将小程序绑定微信开放平台,就没有unionid。
二、获取unionID的其他几种方法(主要是在客户端获取)
- 调用接口wx.getUserInfo,从解密数据中获取UnionID。
- 如果你绑定的微信开放平台下存在同主体的公众号,并且该用户已经关注了该公众号。可以直接通过wx.login获取到用户UnionID,无须用户再次授权。
- 如果你绑定的微信开放平台下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。也可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。