微信官方最近已经回收了前端通过getUserInfo接口获取微信信息的功能,现在推荐的办法是使用后端解密获取,具体办法如下:
第一步:通过jscode2session获取openid
$appid = '你的appid';
$secret = '你的secret';
$js_code = $params['code']; //前端传给后端的js_code
$url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' . $appid . '&secret=' . $secret . '&js_code=' . $js_code . '&grant_type=authorization_code';
$getOpenid = curl_init();
curl_setopt($getOpenid, CURLOPT_URL, $url);
curl_setopt($getOpenid, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($getOpenid, CURLOPT_HEADER, 0);
curl_setopt($getOpenid, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($getOpenid, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($getOpenid, CURLOPT_CONNECTTIMEOUT, 10);
$resultSession = curl_exec($getOpenid);
$disposeData = @json_decode($resultSession,true); //获取请求接口后的数据,拿到openid和session_key。
第二步:通过session_key,encryptedData,iv获取解析微信用户信息
$openid = $disposeData['openid'];
$sessionKey = $disposeData['session_key'];
/**
* 分割线,上方获取sessionKey,下方使用sessionKey进行解密
*/
$encryptedData = $params['encryptedData']; //前端传
$iv = $params['iv'];//前端传
$encryptedData = str_replace(' ', '+', $encryptedData);
//此处接收到微信发送的数据时,PHP会将数据中的+转化为空格,此处需要将空格转化为+
$iv = str_replace(' ', '+', $iv);
$aesKey = base64_decode($sessionKey);
$aesIV = base64_decode($iv);
$aesCipher = base64_decode($encryptedData);
$result = openssl_decrypt($aesCipher, 'AES-128-CBC', $aesKey, 1, $aesIV);
$userData = @json_decode($result,true);
结果中的$userData就是获取的微信用户数据。