php获取微信uninoid_微信小程序获取用户unionId
unionId
一个微信开放平台下的相同主体的App、公众号、小程序的unionid是相同的,这样就可以锁定是不是同一个用户
微信针对不同的用户在不同的应用下都有唯一的一个openId, 但是要想确定用户是不是同一个用户,就需要靠unionid来区分
同一个微信开放平台下的相同主体的 App、公众号、小程序,如果用户已经关注公众号,或者曾经登录过App或公众号,则用户打开小程序时,开发者可以直接通过 wx.login 获取到该用户UnionID,无须用户再次授权
(解读:用户如果没有登录过app,也没有登录过公众号,也没有关注过公众号的情况下,小程序中通过 wx.login 是获取不到 unionid的)
UnionID获取途径
绑定了开发者帐号的小程序,可以通过下面3种途径获取UnionID。
调用接口wx.getUserInfo,从解密数据中获取UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。
如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。
如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过wx.login获取到该用户UnionID,无须用户再次授权
用到的API
wx.login(obj)
wx.getUserInfo(obj)
注意:getUserInfo此接口有调整,使用该接口将不再出现授权弹窗,请使用
坑:
我们一般都是先获取到微信的 unionid,然后再通过 unionid 去登录自己的网站,就可以关联到用户在自己网站上的 user_id,但是在小程序登录中,有时候可以获取到 unionid,有时候获取不到,在获取不到 unionid 的情况下,用户无法正常登录网站。
原因:同一个微信开放平台下的相同主体的 App、公众号、小程序,如果用户已经关注公众号,或者曾经登录过App或公众号,则用户打开小程序时,开发者可以直接通过 wx.login 获取到该用户UnionID,无须用户再次授权
(解读:用户如果没有登录过app,也没有登录过公众号,也没有关注过公众号的情况下,小程序中通过 wx.login 是获取不到 unionid的)
所有就有两种情况:
一般情况,用户登录过关联的其他公众号
使用 wx.login 获取code,传到后端,code换openid,unionId
//1.login
wx.login({
success: function(data) {
wx.request({
url: openIdUrl,
data: {
code: data.code
},
success: function(res) {
self.globalData.openid = res.data.openid
},
fail: function(res) {
console.log('拉取用户openid失败,将无法正常使用开放接口等服务', res)
}
})
},
fail: function(err) {
console.log('wx.login 接口调用失败,将无法正常使用开放接口等服务', err)
callback(err)
}
})
用户没有用过关联的公众号等
这时候 wx.login 就获取不到 unionId 了。需要使用 wx.getUserInfo
解决思路:通过带登录态的 wx.getUserInfo 获取到用户的加密数据 encryptedData 和加密算法的初始向量iv,然后将 encryptdata、iv 以及 code传给后端,后端再去通过接收到的encryptedData、iv以、code 以及之前的 session_key 解密出用户的 openid、unionid 等
wx.getUserInfo({
withCredentials:false,
success:(obj)=>{
wx.request({
url: openIdUrl,
data: {
code: data.code,
encryptedData : obj.encryptedData,
iv : obj.iv,
},
success: function(res) {
self.globalData.openid = res.data.openid
},
fail: function(res) {
console.log('拉取用户openid失败,将无法正常使用开放接口等服务', res)
}
})
}
})
实际项目中,需要将两种情况整合使用
两种方案:
第一种:( 前端判断是否有 unionid )wx.login 向后端上传 code 并且后端返回数据以后,前端判断返回值中是否有 unionid 或者 unionid 是否为 null,null 的情况下去调用带有用户登录态的wx.getUserInfo(),然后再将微信返回的 encryptedData 和 iv 返回给后端,后端解密出相应的信息后再返回给前端;
第二种:( 后端判断是否有 unionid )前端调用 wx.login(), wx.getUserInfo() ,把 code,encryptedData 和 iv 返回给后端,后端在拿到前端 code 之后去请求微信的接口拿 unionid,如果返回的 unionid 为空,再用的 encryptedData、iv以及之前的 session_key 解密出 unionid,后端解密出相应的信息后再返回给前端
php获取微信uninoid_微信小程序获取用户unionId相关推荐
- 微信开放平台 帐号管理 绑定在同一个开放平台帐号下的公众号及小程序让用户unionid一致...
开发十年,就只剩下这套架构体系了! >>> 第三方平台在获得此权限后,可以代替已授权的公众号/小程序创建开放平台帐号或进行绑定/解绑操作. 绑定在同一个开放平台帐号下的公众号及 ...
- 微信用户绑定java实例_微信开放平台 帐号管理 绑定在同一个开放平台帐号下的公众号及小程序让用户unionid一致...
第三方平台在获得此权限后,可以代替已授权的公众号/小程序创建开放平台帐号或进行绑定/解绑操作. 绑定在同一个开放平台帐号下的公众号及小程序,用户unionid一致.开发者可调用"获取用户基本 ...
- java 显示天气的小程序_超级简单的微信小程序获取今日天气预报代码 小程序获取七日天气...
代码是天气api的小程序demo, 粘贴上js和wxml就可以运行看效果了, 有问题的加我qq 445899710, 可提供源代码, 效果如图 如果是测试, 请勾选配置 不校验合法域名.web-vie ...
- 小程序获取openid和unionid服务号获取unionid服务号消息推送
网上很多资料但是都太杂太乱很多是复制过来复制过去,微信官方给的文档也很坑很多地方没说清,自己整理了一下. 首先:要获取unionid服务号和小程序都要绑定到微信开放平台,并且都要认证,认证需要一定费用 ...
- 获取this_小程序获取微信运动步数并集成echarts报表显示
需求 现在运动计步非常的火,大家常用的计步工具一般有keep.咕咚.微信运动和其他移动设备等,本文是基于微信小程序获取用户的微信运动数据并可视化呈现出来. 先看一下最终实现效果: 微信运动规则 在开发 ...
- 微信小程序获取openid和session_key并且把openid存入数据库
微信小程序开发交流qq群 581478349 微信小程序获取openid和session_key并且把openid存入数据库.已经调用openid的demo 前后端代码都有,后端php实现 在其它 ...
- android获取小程序音频时长,最新微信小程序获取音频时长与实时获取播放进度...
#微信小程序获取音频时长与实时获取播放进度 在小程序官方文档中 audio 注意:1.6.0 版本开始,该组件不再维护.建议使用能力更强的 wx.createInnerAudioContext 接口 ...
- 微信小程序获取用户手机号--官方示例
微信小程序获取用户手机号–官方示例 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNu ...
- 微信小程序 获取用户信息并保存登录状态
微信小程序 获取用户信息并保存登录状态:http://www.360doc.com/content/18/0124/11/9200790_724662071.shtml 转载于:https://www ...
- 微信小程序获取openid
获取openId (用户唯一标识)和session_key 第一步,获取code 调用wx.login(OBJECT) 获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid ...
最新文章
- shmmax单位_linux 内存管理——内核的shmall 和shmmax 参数
- NR 5G L3无线资源控制层
- HTTP权威指南阅读笔记五:Web服务器
- 高效代码审查:来自前质疑者的9个建议
- mySql安装时常见问题处理
- JSP中request内置对象
- Javsscript自定义事件和触发
- 下标要求数组或指针类型_C语言,数组循环哪家好,指针or下标?
- 计算机控制总线传输的是,总线,地址总线,数据总线和控制总线
- TI DSP处理器中CMD 文件的那些事儿
- php 0 加减乘除,php 加减乘除计算器 用php简单实现加减乘除计算器
- 进程隐藏的各种方法 以及分析比较以及实现链接
- android wear iphone7,多款Android Wear手表不兼容苹果iPhone7
- python连接S3
- python关键字参数必须位于位置参数之前_python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)...
- 阅读类APP开发的好处有哪些
- 星起航长期看好抖音小店的潜力
- 嵩天python爬虫百度云盘_基于MOOC嵩天《Python网络爬虫与信息提取》视频学习记录——第一周:requests库...
- ios13全选手势_iOS13大揭秘:深色模式、多任务、新手势等
- 计算机程序是通过专利保护,《专利审查指南》修改后计算机程序的专利保护研究.doc...