IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 小程序获取手机号 -> 正文阅读

[PHP知识库]小程序获取手机号

注意:(个人号不可获取手机号,可以通过测试号获取手机号)

1.小程序页面(wxml)

<button open-type="getPhoneNumber" bindgetphonenumber="getPhone">获取手机号</button>

浏览页面如下:

?????????

?2.小程序逻辑代码(js)

 //获取手机号
  getPhone(e){
    let errMsg = e.detail.errMsg;
    //加密格式
    let iv =e.detail.iv;
    let encry = e.detail.encryptedData;
    let token = wx.getStorageSync('token');
    let phone = wx.getStorageSync('phone');
      
     //手机号和验证码验证略

      if(errMsg=='getPhoneNumber:ok'){
        //发送请求
        wx.request({
          url: '请求地址',
          data:{
            iv,encry //数据
          },
          header:{
            token
          },
          success:ret=>{
           if(ret.data.code==200){
              wx.setStorageSync('phone',true);
              //跳转到其他页面
            }else{
              //弹出错误信息
              wx.showToast({
                title: ret.data.msg,
                icon:'error'
              })
            }
            }
          })
      }else{
        //跳转到通过短信验证码获取手机号页面
        wx.navigateTo({
          url: '/pages/messageCode/messageCode',
        })
      }
    
  
  },

?3.后台框架(laravel + php)

     /**
     * 微信授权手机号
     */
    public function wxGetPhone(Request $request)
    {
        //接值
        $param = $request->all();
        //非空验证
        $validate = Validator::make($param,[
            'uid' => 'required',
            'iv' => 'required',
            'encry' => 'required'
        ]);

        if($validate->fails()){
           $error = $validate->errors();
           return ['code'=>400,'msg'=>$error->first(),'data'=>''];
        }

        //查询用户信息
        //token在中间件验证后,获取用户id
        $userInfo = User::find($param['uid']);
        //本人的登录为进入小程序自动登录(app.js),并在后台把openid和session_key存储到库中
        //也可在授权登录的同时获取手机号,通过code码,appid,密钥获取session_key和openid
        $aesKey=base64_decode($userInfo->session_key);
        //解密iv
        $aesIV=base64_decode($param['iv']);    
        //解密encryptedData
        $aesCipher=base64_decode($param['encry']);
        //获取手机号
        $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
        $dataObj=json_decode( $result );
        if( $dataObj  == NULL )
        {
            return ['code'=>'404','msg'=>'获取失败','data'=>''];
        }

        //修改用户的手机号
        $userInfo->phone = $dataObj->purePhoneNumber;
        $userInfo->save();

        return ['code'=>200,'msg'=>'获取成功','data'=>''];
    }

?解密成功得到以下代码

?

?其上的iv,encryptedData如何解密,如下:

?

? ? ?压缩文件中,关键类在

?????????

?解密关键

?代码仅供参考,写的不对的地方请指出

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:13:29  更:2021-08-31 15:13:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:32:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码