后台php处理 微信小程序 授权登录 获取手机号

微信获取手机 必须 先授权登录 ,也就是在前端使用 wx.login(),详情请看微信官方文档 

一、后台拿到 code 也就是登录后返回的 一个参数 ,然后进行  auth.code2Session 解密 , 换取 openid 和 session_key 代码入下

    $appid      = '你的appid';//小程序唯一标识   (在微信小程序管理后台获取)
    $appsecret  = '你的';//小程序的 app secret (在微信小程序管理后台获取)
    $grant_type = "authorization_code"; //授权(必填)
    $js_code  = '前端获取的code'
    $curl = curl_init();
    //使用curl_setopt() 设置要获得url地址
    $url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' . $appid . '&secret=' . $appsecret . '&js_code=' . $js_code . '&grant_type=' . $grant_type;
    curl_setopt($curl, CURLOPT_URL, $url);
    //设置是否输出header
    curl_setopt($curl, CURLOPT_HEADER, false);
    //设置是否输出结果
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    //设置是否检查服务器端的证书
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    //使用curl_exec()将curl返回的结果转换成正常数据并保存到一个变量中
    $data = curl_exec($curl);
    //关闭会话
    curl_close($curl);
    return json_decode($data,true);

 二、获取到的 openid 就是小程序 授权登录的唯一标示符  然后我们就需要 前端 再登录后 点击 

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>

 获取手机号的 按钮,这时候 你就能获取到 encryptedData (加密数据 ) iv(加密算法的初始向量) cloudID (敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见云调用直接获取开放数据 这个咱不做处理)

我们要做的就是 通过 登录时,获取session_key(有时效性 注意不要过期了) 与  encryptedData,iv 就行解密 微信官方加密数据解密算法点击此处,代码如下

 public function getMobile($sessionKey,$encryptedData,$iv){
        $aesKey = base64_decode($sessionKey);
        $aesIV = base64_decode($iv);
        $aesCipher = base64_decode($encryptedData);
        $result = openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
        $result = json_decode($result,true);
        if($result){
            return $result['phoneNumber'];
        }
        return '';
    }

 三、获取用户信息 是比较简单 前端拿到的也是明文,使用 wx.getUserInfo()官方文档 只需要把拿到的数据 存入你的数据库就行

性别字段 需要注意一下与你的 是否一致  gender  0=未知,1=男性,2=女性

发布了52 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40816144/article/details/101444869