PHP小程序获取用户手机号以及用户信息

微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码

getPhoneNumber这个组件要通过button来实现。将button中的open-type=“getPhoneNumber”,并且绑定bindgetphonenumber事件获取回调。

1.在使用这个组件之前必须先调用 login 接口,获取到code,使用code发送到服务端,服务端请求小程序登录接口获取openid以及session_key等参数。

2.调用组件

小程序代码:

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"
 hover-class="none">一键自动注册</button> 

通过这个前端可以获取到iv,encryptedData这两个参数,这个参数是加密过,后台可以通过之前获取的session_key参数进行解密。(官方也提供了很多语言的解密demo),下载下来直接放在自己项目对应的位置就行,下面直接上代码(TP框架):

3.服务端解密获取手机号:

    $appid = config('wechat.app_id');//	小程序appid
     $secret = config('wechat.secret');   //  小程序appsecret

     $code = request()->param('code');
     $encryptedData = request()->param('encryptedData');
     $iv = request()->param('iv');

     /**
      *  请求微信官方接口获取用户手机号
      */
     $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";
     $user = curlHttp($url);

     $pc = new WXBizDataCrypt($appid, $user['session_key']);
     $errCode = $pc->decryptData($encryptedData, $iv, $data );
     if($errCode == 0){
         $data = json_decode($data);
         dump($data);//获取的手机号数据
      }

获取用户信息也是差不多的逻辑,也是调用小程序的接口获取加密数据服务端进行解密:

必须是在用户已经授权的情况下调用

wx.getUserInfo({
  success: function(res) {
    var userInfo = res.userInfo
    var nickName = userInfo.nickName
    var avatarUrl = userInfo.avatarUrl
    var gender = userInfo.gender //性别 0:未知、1:男、2:女
    var province = userInfo.province
    var city = userInfo.city
    var country = userInfo.country
  }
})

你可能感兴趣的:(PHP)