微信获取手机 必须 先授权登录 ,也就是在前端使用 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=女性