小程序获取手机号

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

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如何解密,如下:

 

     压缩文件中,关键类在

         

 解密关键

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值