wx小程序授权登录 和 授权获取手机号 |
您所在的位置:网站首页 › 个人微信小程序获取手机号 › wx小程序授权登录 和 授权获取手机号 |
小程序授权登录,所有用户包括个人用户都可以获取: 前端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 |