每次感觉主题修完了就会有一些新的毛病冒出来。问题还是在评论区,访客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
,完美解决。
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载但请务必注明出处,尊重他人劳动成果。
转载请注明出处链接 : https://www.inlojv.com/5584.html