记录:小程序授权登录并获取手机号

PHP代码:

 public function __construct(){$site = Config::get("site");$WX_AppID = $site['WX_AppID'];$WX_AppSecret = $site['WX_AppSecret'];$this->appid = $WX_AppID;$this->secret = $WX_AppSecret;parent::__construct();}/*** 小程序登录** @ApiMethod (POST)* @param string $code     Code码*/public function wxlogin(){$code = $this->request->post('code');if (!$code) {$this->error('code不能为空');}$nick_name = $this->request->post('nick_name/s','','trim');$avatar = $this->request->post('avatar/s','','trim');$gender = $this->request->post('gender/d','','trim');$city = $this->request->post('city/s','','trim');$province = $this->request->post('province/s','','trim');$country = $this->request->post('country/s','','trim');$share_id = $this->request->post('share_id/d',0);// 获取小程序配配置,获取openid 跟 session_key$wxData = $this->getOpenid($code);if($wxData['status'] == 'error'){$this->error($wxData['msg']);}$openid = $wxData['data']['openid'];$sessionKey = $wxData['data']['session_key'];$unionid = $wxData['data']['unionid'];//检测上级$pid = 0;$parentids = '';if($share_id){$parentUser = model('user')->field('id,parentids')->find($share_id);if($parentUser){$pid = $parentUser['id'];if($parentUser['parentids']){$parentids = $parentUser['parentids'].','.$pid;}else{$parentids = $pid;}                }}$userinfo = \app\admin\model\User::where(['openid' => $openid])->find();if ($userinfo) {$userinfo->nickname = $nick_name;$userinfo->avatar = $avatar;$userinfo->gender = $gender;$userinfo->city = $city;$userinfo->province = $province;$userinfo->country = $country;$userinfo->unionid = $unionid;$userinfo->save();$this->auth->direct($userinfo['id']);} else {//生成邀请码$invite_code = $this->callcheckstr();$user = new \app\admin\model\User();$user->data(['nickname' => $nick_name,'avatar' => $avatar,'gender' => $gender,'city' => $city,'province' => $province,'country' => $country,'status' => 'normal','openid' => $openid,'unionid' => $unionid,'invite_code'=>$invite_code,'pid'=>$pid,'parentids'=>$parentids,'group_id'=>1,]);$user->save();$this->auth->direct($user->id);}$this->success('登录成功', $this->auth->getUserinfo());}/*** 小程序授权获取手机号*/public function wxGetPhone(){$iv = $this->request->post("iv", '', 'trim');$encryptedData = $this->request->post("encryptedData", '', 'trim');$code = $this->request->post('code');if (!$code) {$this->error('code不能为空');}// 获取小程序配配置,获取openid 跟 session_key$wxData = $this->getOpenid($code);if($wxData['status'] == 'error'){$this->error($wxData['msg']);}$sessionKey = $wxData['data']['session_key'];$datainfo = $this->auth->getUserinfo();if (!$iv || !$encryptedData) {$this->error('传参有误');}$errCode = self::decryptData($encryptedData, $iv, $data, $sessionKey, $this->appid);if ($errCode == 0) {$result = json_decode($data, true);if (isset($result['phoneNumber'])) {$user = \app\admin\model\User::get($datainfo['id']);$user->mobile = $result['phoneNumber'];$user->save();$this->success('获取成功', $result);} else {$this->error('号码获取失败');}} else {$this->error('用户信息更新失败');}}/*** 获取小程序配配置* @param $code 用来交换获取openid 跟 session_key*/static function getOpenid($code){$url = sprintf('https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code', $this->appid, $this->secret, $code);$result = Http::get($url);$wxResult = json_decode($result, true);if (empty($wxResult)) {return ['status'=>'error','msg'=>'获取sessin_key及openID时异常'];}if (isset($wxResult['errcode']) && $wxResult['errcode'] != 0) {return ['status'=>'error','msg'=>$wxResult['errmsg']];}$item = ['openid' => $wxResult['openid'],'session_key' => $wxResult['session_key'],'unionid' => isset($wxResult['unionid']) ? $wxResult['unionid'] : '',];return ['status'=>'success','data'=>$item];}/*** 检验数据的真实性,并且获取解密后的明文.* @param $encryptedData string 加密的用户数据* @param $iv string 与用户数据一同返回的初始向量* @param $data string 解密后的原文** @return int 成功0,失败返回对应的错误码*/static function decryptData($encryptedData, $iv, &$data, $sessionKey, $appid){if (strlen($sessionKey) != 24) {return -41001;}$aesKey = base64_decode($sessionKey);if (strlen($iv) != 24) {return -41002;}$aesIV = base64_decode($iv);$aesCipher = base64_decode($encryptedData);$result = openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);$dataObj = json_decode($result);if ($dataObj == NULL) {return -41003;}if ($dataObj->watermark->appid != $appid) {return -41003;}$data = $result;return 0;}

小程序授权登录并获取手机号相关推荐

  1. 微信小程序授权登录和获取手机号功能(详细)

    总结,新增获取用户手机号功能,里面用到了关于获取用户信息和用户手机号的功能,一开始写的时候发现我把两个按钮写在一个登录页面上,获取手机号逻辑是当用户点击授权之后跳转到首页,当点击拒绝弹窗提示,最后发现 ...

  2. uniapp微信小程序授权登录并获取手机号

    新版:前端要授权两次,一次获取用户信息授权码code,另外一次获取用户手机授权码code,全部传给后端.后端通过用户信息授权码获取openid,通过手机授权码获取手机号码.老版:前端传给后端授权码co ...

  3. 微信小程序授权登录(获取手机号及用户信息)

    目录 1.开放平台绑定微信小程序 2.小程序AppID/AppSecret获取 3.获取授权信息 4.获取用户信息

  4. uniapp微信小程序授权登录和获取微信绑定的手机号码

    uniapp微信小程序授权登录和获取微信绑定的手机号码 弹出授权的弹框 <view class="weixinOk" @tap="getUserProfile&qu ...

  5. 微信小程序授权登录(含获取基本信息及绑定的手机号)

    1.授权获取微信个人信息 wx.getUserProfile({desc: '展示用户信息',success: (res) => {this.setData({nickName: res.use ...

  6. 基于Thinkphp5+EasyWeChat+fastadmin微信小程序授权登录获取手机号微信公众号网页---联合授权登录

    战前准备 1.使用 composer 安装 EasyWeChat $ composer require overtrue/wechat:~4.0 -vvv 或者在composer.json文件renq ...

  7. 微信小程序授权登录+获取手机号

    微信小程序授权登录+获取手机号 一.官方文档背景: 小程序登录的链接: 微信小程序获取手机号的链接: 二.微信小程序授权登录+获取手机号 1.简单说明官方文档的操作:先授权登录后拿手机号 2.前端代码 ...

  8. SpringCloud 微信小程序授权登录 获取openId SessionKey【SpringCloud系列13】

    SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见. 自我提升方法推荐:神奇的早起 早上 5:00 -5:20 起床刷牙 5:30-6:00 晨练(跑步.跳绳.骑自行车.打球等等) ...

  9. 简单实现小程序授权登录功能

    本人给大家带来了关于微信小程序的相关知识,其中主要介绍了怎么实现小程序授权登录功能的相关内容,下面一起来看一下,希望对大家有帮助. 在我们平时工作.学习.生活中,微信小程序已成为我们密不可分的一部分, ...

  10. 【uniapp小程序授权登录】

    uniapp微信小程序授权登录具体流程 打开小程序公众平台,申请小程序appid hbuilderx创建项目并打开项目,点击manifest.json->点击小程序配置->配置小程序app ...

最新文章

  1. xheditor 内容保存时 不转义html特殊字符,xheditor编辑器上传图片(示例代码)
  2. Swoole-2.1.2 进程池模块的使用
  3. support v4官方下载_掌心长兴客户端下载-掌心长兴ap下载v4.1.4 安卓官方版
  4. 普通二本的辛酸Android面试之路,满满干货指导
  5. scanf sscanf 的用法
  6. 将网桥的配置写进去/etc/sysconfig/network-scripts/ifcfg-xxx
  7. Nginx(七):nginx原理解析
  8. python生成随机整数_Python中,我想得到1~255随机整数,用rand.randint(1,255),但不想让里面170这个数出现,怎么写呢?...
  9. Python递归函数的正确理解与使用
  10. Android 软键盘弹出时把原来布局顶上去的解决方法
  11. Day0205____数据库
  12. 系统集成项目管理工程师的含金量
  13. xsmax无法进入dfu模式_iPhoneXSMax怎么强制重启-如何进入DFU模式
  14. javascript禁用Backspace退格键(结合自己实际应用中遇到的textarea中退格造成页面假死问题做了修改)
  15. 爬虫 微博评论记录_记录或评论?
  16. chromium 浏览器markdown神器插件
  17. 快速上手 Android 蓝牙串口 SPP 开发
  18. 简谈五线制交流道岔控制电路故障的处理方法【铁路信号技术专栏】——转自微信公众号高速铁路信号技术交流
  19. 以太坊Ropsten测试网合并意味着什么?
  20. c语言统计输入文本不同字母单词数,统计文本中单词的个数

热门文章

  1. 巫师3储物箱在哪_巫师三孤岩宝箱在哪 | 手游网游页游攻略大全
  2. SpringAop原理
  3. 项目:小型局域网的搭建(基础知识+案例)
  4. CentOS 8配置阿里YUM源
  5. 一个月通过软考中级软件设计师
  6. ad15图层显示_AD15使用及设置
  7. STC12C2052AD+TM1640+DS1302闹钟
  8. Idea如何设置Tomcat热部署
  9. k近邻算法_机器学习 第38集:k近邻算法k值过小和过大有什么危害?k值如何选取?( 含有笔记、代码、注释 )...
  10. java定义上三角矩阵,数据结构-矩阵-三角矩阵(Java语言)