wx小程序授权登录 和 授权获取手机号

您所在的位置:网站首页 个人微信小程序获取手机号 wx小程序授权登录 和 授权获取手机号

wx小程序授权登录 和 授权获取手机号

2024-07-12 07:14| 来源: 网络整理| 查看: 265

小程序授权登录,所有用户包括个人用户都可以获取:

前端wxml只需给出一个按钮,

授权登录

js部分使用wx.getUserProfile和wx.login函数

login(){ wx.getUserProfile({ desc: 'desc', success:info=>{ wx.login({ success:code=>{ wx.request({ url: 'http://www.xxx.com/api/login', method:"POST", data:{ nickName:info.userInfo.nickName, avatarUrl:info.userInfo.avatarUrl, code:code.code }, success:res=>{ if(res.data.code != 200){ wx.showToast({ title: '登录失败', icon:'error' }) return } wx.setStorageSync('token', res.data.data) } }) } }) } }) },

获取用户信息和code码,将code传到后端,

使用php和curl请求登录api获取openid和session_key用作手机号授权

public function login(Request $request) { // 获取code $code = $request->input("code"); // 获取昵称 $nickname = $request->input("nickName"); // 获取头像 $img = $request->input("avatarUrl"); // 从微信公众平台获得appid $appid = "xx"; // 从微信公众平台获得secret $secret = "xx"; // 发送请求换取openid和sessionkey $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code"; // 暂使用file_get_contents()发送请求,你可以使用CURL扩展的形式实现 $res = json_decode(file_get_contents($url), true); // 组装用户数据 $info = [ 'nickname' => $nickname, 'img'=>$img, 'openid' => $res['openid'], 'session_key' => $res['session_key'] ]; // 查询用户是否是第一次登录 $user = Login::where("openid", $res['openid'])->first(); // 判断 if ($user) { return ['code' => 200, 'msg' => '已经注册过', 'data' => $user]; } $data = Login::create($info); return ['code' => 200, 'msg' => '注册成功', 'data' => $data]; }

授权获取手机号: 个人AppID无法获取手机号,需要先申请测试号

使用方法:将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。

微信官方文档:获取手机号 | 微信开放文档

小程序端wxml代码:

手机号授权

js:

getPhoneNumber (e) {     let iv = e.detail.iv     let encryptedData = e.detail.encryptedData     let token = wx.getStorageSync('token')     wx.request({       url: 'http://www.xxx.com/api/getPhone',       data:{         iv,         encryptedData,         token       },       method:'POST',       success:res=>{       console.log(res)       } }) }

 注意:iv、 encryptedData是必要参数

解密:

//获取手机号 public function getPhoneNumber(Request $request) { $params = $request->all(); $user_id = (new Token())->chekToken($params['token']); try{ //获取用户信息 $user = User::where('id',$user_id)->first(); $aesKey = base64_decode($user->session_key); $aesIV = base64_decode($params['iv']); $aesCipher = base64_decode($params['encryptedData']); $result = openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV); $phoneNumber = json_decode($result, true)['purePhoneNumber']; //更改手机号 $user->phone = $phoneNumber; $user->save(); return ['code' => 200,'msg' => 'ok']; }catch (\Exception $e){ return ['code' => 400,'msg' => $e->getMessage()]; } }

这样就完成了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3