后端代码
public function login(){
$code = input("code"); //小程序获取的code
if (!$code) {
return AjaxReturn(0,"缺少code");
}
$config = config("mini_program");
$app_id = $config["app_id"]; //appid
$app_secret = $config["app_secret"]; //app_secret
if (!$app_id || !$app_secret) {
return AjaxReturn(0,"小程序配置错误");
}
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=".$app_id."&secret=".$app_secret."&js_code=".$code."&grant_type=authorization_code";
$json = file_get_contents($url);
$data = json_decode($json,true);
if (!isset($data["errcode"])) {
if (isset($data["unionid"])) {
$where = ["unionid"=>$data["unionid"]];
} else {
$where = ["openid"=>$data["openid"]];
}
$iv = input("iv"); //小程序传的iv
$encryptedData = input("encryptedData");
$phone = $this->decryptData($iv,$data['session_key'],$encryptedData); //调用解密方法
if(strlen($phone['phoneNumber']) > 0){ //判断是否解析成功
....你的其他数据操作
}else{
return AjaxReturn(0,'获取手机号失败',$phone);
}
}else {
return AjaxReturn(0,"获取用户信息失败");
}
}
获取手机号解密方法
public function decryptData($iv,$session_key,$encryptedData)
{
$config = config("mini_program");
if (strlen($session_key) != 24)return false;
if (strlen($iv) != 24)return false;
// $encryptedData = str_replace(' ','+',$encryptedData);
// $iv = str_replace(' ','+',$iv);
$aesKey=base64_decode($session_key);
$aesIV=base64_decode($iv);
$aesCipher=base64_decode($encryptedData);
$result=openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
$dataObj=json_decode($result);
if($dataObj == NULL)return false;
if($dataObj->watermark->appid != $config["app_id"])return false;
$data = get_object_vars($dataObj);
return $data;
}