每次感觉主题修完了就会有一些新的毛病冒出来。问题还是在评论区,访客QQ信息获取出问题了。而且一路排查下来几个问题是不相关的,分别涉及到前端后端和服务器。
废话不多说了,原版在这里——>WordPress评论框输入QQ获取头像和昵称教程

插入字段这些操作不需要改,重点是前端get传参到后端时的处理过程。后端处理过程如下:


/**
 * QQ昵称/头像API 
 * 2020.09.29 更新api,同时更换api页面内容获取方式为curl,编码转换也由mb_convert_encoding 换成 iconv
 */

header("content-Type: text/html; charset=Utf-8");
$type = @$_GET['type'] ? $_GET['type'] : '';
if(empty($type)){
	//header("Location:http://www.inlojv.com/");
	exit;
}
if($type == "getqqnickname"){
	$qq = isset($_GET['qq']) ? addslashes(trim($_GET['qq'])) : '';
	if(!empty($qq) && is_numeric($qq) && strlen($qq) > 4 && strlen($qq) < 13){
		
		// curl方法
		$api_url = 'http://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins='.$qq;
		$ch = curl_init();
		curl_setopt ($ch, CURLOPT_URL, $api_url);
		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳转后的页面,如果不加这一条则会返回302
		$page_content = curl_exec($ch);
		if($page_content){
			// $page_content = mb_convert_encoding($page_content, "UTF-8", "GBK"); // 有的服务器使用mb_convert_encoding进行编码转换会报500,所以用iconv
			$page_content = iconv('GBK','UTF-8',$page_content); // 编码转换
			echo $page_content; // 返回类似:portraitCallBack({"984636180":["http://qlogo1.store.qq.com/qzone/984636180/984636180/100",143,-1,0,0,0,"v大叔",0]}) 这样的内容
		}
		
		
	}
}
if($type == "getqqavatar"){
	$qq = isset($_GET['qq']) ? addslashes(trim($_GET['qq'])) : '';
	if(!empty($qq) && is_numeric($qq) && strlen($qq) > 4 && strlen($qq) < 13){

		// curl方法
		$api_url = 'http://ptlogin2.qq.com/getface?appid=1006102&imgtype=3&uin='.$qq;
		$ch = curl_init();
		curl_setopt ($ch, CURLOPT_URL, $api_url);
		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳转后的页面,如果不加这一条则会返回302
		$qqavatar = curl_exec($ch);

		if($qqavatar){
			echo str_replace("pt.setHeader","qqavatarCallBack",$qqavatar);
		}
	}
}

可以看到,获取昵称的api换了一个:http://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins=QQ号码(原来的api已经废了)
这是qq获取功能失效的第一个原因。
然后获取返回数据内容的方法由原来的 file_get_contents 换成了 curl ,这样的话后台评论显示就不会这么卡顿了。
最后是一直困扰我的问题:我发现自己的服务器居然不支持mb_convert_encoding这个编码转换函数,页面不断报500错误,我还以为是js的请求方法出了问题,一直耗了我两个小时才反应过来,一句一句排查,最后才发现是服务器的锅,于是果断换成iconv,完美解决。
qq