关于微信登录授权获取unionid的方法
前言:微信登录授权是目前普遍存在于小程序的,还有一种静默授权方式是微信提供的但是不推荐使用,由于不同设备登录openid是不同的那么我们应该怎样拿到一个唯一的ID呢,下面做分享
wxml代码
<button open-type="getUserInfo" bindgetuserinfo='userInfo'>授权</button> //这两个方法是官方提供使用的
wxjs代码 //当用户点击触发wx.getUserInfo wx.getUserInfo({
//成功后会返回你登录扫码的那个微信的相关信息 success(res) { //console.log(res); var _getUserInfo = res; var _userInfo = JSON.parse(res.rawData); //_this.setData({ nickName: _userInfo.nickName, avatarUrl: _userInfo.avatarUrl });这里主要修改了显示了用户信息 /**登陆:获取openid */ wx.login({ success(res) { //console.log(res); wx.request({ url: 'http://127.0.0.1:8000/api/v1/Index/getOpenid',//这里是后台的接口地址 method: 'post',//method data: { code: res.code, //上面成功返回的值 encryptedData: _getUserInfo.encryptedData,//下面成功返回的值 iv: _getUserInfo.iv//上面成功返回的值 }, success(res) { console.log(res); } }) } }) } })
//后端php代码 获取用户登录的相关信息方法 public function getOpenid(){ include_once "../wx/PHP/wxBizDataCrypt.php";//通过小程序提供的==>https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html $data = request()->post();//获取传递的值 $appid = "xxxx";//登录appid $secret = "xxxx";//secret密码 $iv = $data['iv'];//登录成功会返回的小程序端口传递过来的 $encryptedData = $data['encryptedData'];//同上传递过来的 $code = $data['code'];//同上传递过来的 $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code";//get调用这个小程序接口 $data = json_decode(file_get_contents($url),true);//返回一个字符串包含了openid // halt($data); $sessionKey = $data['session_key'];//获取返回的解密方法 $openid = $data['openid']; $pc = new \WXBizDataCrypt($appid, $sessionKey); $errCode = $pc->decryptData($encryptedData, $iv, $unionId ); halt($uniont);//获取解密后的unionid到这里你也是拿不到的需要在小程序开发平台绑定小程序
到此你大概知道了吧openid是加密后的值我们只需要解密出来就可以得到唯一的unionid值
IT这条路,当你懂得越多的时候,那么你不懂的也就会越多了.