php获取微信uninoid_PHP微信小程序之获取并解密用户数据获取openId和unionId,,小程序登陆...
前言
微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html
在实际的小程序开发中,往往需要用户授权登陆并获取用户的数据,快速对接用户系统。
openId: 用户在当前小程序的唯一标识
unionId : 如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionId是相同的。详情登录微信开放平台(open.weixin.qq.com) 。
在微信小程序开发中,unionId等敏感数据则被加密在encryptedData,于是需要以下流程来解密敏感数据,从而获取unionId等信息。
流程
1、(客户端)微信小程序客户端调用 wx.login()接口获取登录凭证(code)
//1、调用微信登录接口,获取code
wx.login({
success: function (r) {
var code = r.code;//登录凭证
if (code) {
//2、调用获取用户信息接口
//...
} else {
console.log('获取用户登录态失败!' + r.errMsg)
}
},
fail: function () {
callback(false)
}
})
2、(客户端)微信小程序客户端调用 wx.getUserInfo()接口获取 用户基本信息、encryptedData(用户敏感信息加密数据) 和 iv(加密算法的初始向量 )
//1、调用微信登录接口,获取code
wx.login({
success: function (r) {
var code = r.code;//登录凭证
if (code) {
//2、调用获取用户信息接口
wx.getUserInfo({
success: function (res) {
console.log({encryptedData: res.encryptedData, iv: res.iv, code: code})
//3.解密用户信息 获取unionId
//...
},
fail: function () {
console.log('获取用户信息失败')
}
})
} else {
console.log('获取用户登录态失败!' + r.errMsg)
}
},
fail: function () {
callback(false)
}
})
3、(客户端)将前面获取到的 code 、encryptedData、iv发送到自己的服务器(开发者服务器),通过自己的服务器(开发者服务器)解密获取信息
//1、调用微信登录接口,获取code
wx.login({
success: function (r) {
var code = r.code;//登录凭证
if (code) {
//2、调用获取用户信息接口
wx.getUserInfo({
success: function (res) {
console.log({encryptedData: res.encryptedData, iv: res.iv, code: code})
//3.请求自己的服务器,解密用户信息 获取unionId等加密信息
wx.request({
url: 'https://xxxx.com/wxsp/decodeUserInfo',//自己的服务接口地址
method: 'post',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
data: {encryptedData: res.encryptedData, iv: res.iv, code: code},
success: function (data) {
//4.解密成功后 获取自己服务器返回的结果
if (data.data.status == 1) {
var userInfo_ = data.data.userInfo;
console.log(userInfo_)
} else {
console.log('解密失败')
}
},
fail: function () {
console.log('系统错误')
}
})
},
fail: function () {
console.log('获取用户信息失败')
}
})
} else {
console.log('获取用户登录态失败!' + r.errMsg)
}
},
fail: function () {
console.log('登陆失败')
}
})
4、(服务端 php)自己的服务器发送code到微信服务器获取openid(用户唯一标识)和session_key(会话密钥),最后将encryptedData、iv、session_key通过AES解密获取到用户敏感数据
解密需要 引用的文件官网可以下载
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html
/**
* 解密用户敏感数据
*
* @param encryptedData 明文,加密数据
* @param iv 加密算法的初始向量
* @param code 用户允许登录后,回调内容会带上 code(有效期五分钟),开发者需要将 code 发送到开发者服务器后台,使用code 换取 session_key api,将 code 换成 openid 和 session_key
* @return
*/
$code = input('get.code');
$appid = 'wx8c9d056ead85efd7';
$secret = '849fbc7dff5c949c2a9707d9a20df7a8';
$encryptedData = input('encryptedData');
$iv = input('iv');
if($code != ''){
$url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
$html = file_get_contents($url);
$obj = json_decode($html);
if(isset($obj->errcode)){
// 获取用户信息失败
return $html;
}else{
$arrlist['openid'] = $obj->openid;
$arrlist['session_key'] = $obj->session_key;
/**
* 解密用户敏感数据
*
* @param encryptedData 明文,加密数据
* @param iv 加密算法的初始向量
* @param code 用户允许登录后,回调内容会带上 code(有效期五分钟),开发者需要将 code 发送到开发者服务器后台,使用code 换取 session_key api,将 code 换成 openid 和 session_key
* @return
*/
include_once "wxBizDataCrypt.php";
$pc = new \WXBizDataCrypt( $appid, $arrlist['session_key']);
$errCode = $pc->decryptData($encryptedData, $iv, $data );
$data = json_decode($data);//$data 包含用户所有基本信息
$arrlist['time'] = time();
$arrlist['city'] = $data->city;//城市-市
$arrlist['country'] = $data->country;//国家
$arrlist['gender'] = $data->gender;//性别
$arrlist['language'] = $data->language;//语言
$arrlist['nickName'] = $data->nickName;//昵称
$arrlist['avatarUrl'] = $data->avatarUrl;//头像
$arrlist['province'] = $data->province;//城市-省份
//判断获取信息是否成功
if ($errCode != 0) {
return $errCode;
}
//存入数据库
$user = db('xw_userinfo');
//判断是否已存在
$list = $user->where('openid',$arrlist['openid'])->find();
if(empty($list)){
//数据不存在 则存入数据
$user->insert($arrlist);
}else{
//数据存在 则更新数据
$where['openid'] = $arrlist['openid'];
$user->where($where)->update($arrlist);
}
return $html;
}
}else{
return json_encode('code为空');
}
总结
好了,总算完成数据解密了
qq:1366860941
php获取微信uninoid_PHP微信小程序之获取并解密用户数据获取openId和unionId,,小程序登陆...相关推荐
- PHP微信小程序之获取并解密用户数据获取openId和unionId
前言 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html 在实际的小程序开发中,往往需要用户授权登陆并获取用 ...
- 微信小程序中的用户ID(openid和unionid)
前沿 做过微信开发的同学,多多少少都会涉及到用户的唯一标示的问题.由于微信牢牢把控着用户的信息,因此当你需要在微信平台中获取用户的标示信息,必然要通过微信的平台接口来获取(当然,你可以通过你自己的平台 ...
- 微信小程序- css相比,wxss区别?小程序关联微信公众号如何确定用户的唯一性?微信小程序中的用户ID(openid和unionid)
1 与css相比, wxss区别? 1) 响应式长度 rpx 2) 样式导入 3) 小程序不支持通配符* *{ width:100rpx; height:100rpx; } 2 小程序关联微信公众号如 ...
- 微信小程序无法获取UnionId的情况及处理
问题背景:做了微信小程序,一切都还正常,但是最后体验版放出去时,却发现很多用户无法绑定用户,后台返回:参数非法.经过多方排查,发现是微信拿到的code请求返回的数据里没有UnionId,也就是接口返回 ...
- php获取微信uninoid_微信小程序获取openid和unionid方法
openid微信公众平台和小程序都有,不同用户在同一公众平台或是小程序中openid可以用于区别不同用户,遗憾的是openid只是应用于当前公众号或小程序. unionid微信公众平台和小程序都有,同 ...
- Java-(二)微信小程序授权获取用户信息和手机号码
第一篇我们已经知道了微信小程序怎么授权登录获取用户信息. openId 和 unionId .下面将高速告诉大家,微信小程序如何授权获取用户信息和手机号码. 微信官方文档:https://develo ...
- java登入ajxs_微信小程序之获取并解密用户数据(获取openid,nickName等)
本文主要总结微信小程序通过后台请求访问微信用户信息 创建一个微信小程序工程(自行百度) 微信小程序index.js代码 //index.js //获取应用实例 const app = getApp() ...
- 2023年微信小程序授权获取头像最新形式——头像昵称填写
官方公告调整背景 小程序用户头像昵称获取规则调整公告 在实践中发现有部分小程序,在用户刚打开小程序时就要求收集用户的微信昵称头像,或者在支付前等不合理路径上要求授权.如果用户拒绝授权,则无法使用小程序 ...
- 微信小程序授权获取头像昵称的最新形式——头像昵称填写
微信小程序授权用户信息,不知道有没有人像我一样,从wx.getUserInfo到wx.getUserProfile再到头像昵称填写获取用户头像昵称全部尝试了一遍,怪就怪自己一开始没仔细看官方文档,没注 ...
最新文章
- tomact+apache实现web网页动静结合
- 设计模式之控制反转和依赖注入的使用小结
- 数据库服务器(SQL SERVER)的安全设置
- Linux下安装Redis(三分钟搞定)
- python123数值运算_python123中 Hello World的条件输出 和数值运算
- java处理表单变量_Java自学之SpringMVC:接收表单数据
- 第十七章 特殊成员_使用typedef简化函数指针的声明
- iocomp控件 Crack V512-sp6
- 7.26 1004度度熊的午饭时光 百度之星题解
- 谷歌最新版本浏览器如何兼容flash插件
- Delphi中使用Imageen控件将图像文件转换成PDF
- PCB正片与负片之分以及实际使用建议
- 网站优化相关理论概述
- GTX 1070Ti正式发布!iGame Vulcan X家族再添新成员
- VR全景航拍补天教程
- 大数据Hive学习案例(2)——基于汽车销售的日志数据分析
- 如何发表高质量的学术论文(硕士、博士均有参考价值)
- Reso | mysql、SQLServer、Oracle的区别
- 904-线程池项目死锁问题分析
- 4--STM32RCC时钟树