微信小程序获取手机号 并 使用php解密

注:个人开发必须使用测试号

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

上干货:

微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

//微信小程序 open-type="getPhoneNumber"
getPhoneNumber (e) {
    let iv = e.detail.iv
    let encryptedData = e.detail.encryptedData
    let token = wx.getStorageSync('token')
    wx.request({
      url: 'http://www.transfer.com/api/phone',
      data:{
        iv,
        encryptedData,
        token
      },
      method:'POST',
      success:res=>{
        
      }
    })
  }

注意:iv、 encryptedData是必要参数

后端代码:以php(laravel8.5)为例

//获取手机号
    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->mobile = $phoneNumber;
            $user->save();
            return ['error_code' => 0, 'data' => '', 'msg' => '手机号获取成功'];
        }catch (\Exception $e){
            return ['error_code' => 10002, 'data' => '', 'msg' => '手机号获取失败'];
        }

    }

到这里基本就完成了!

你可能感兴趣的:(小程序,微信)