youbbs qqcallback 404 qqsetname error:403 Access Denied的解决办法
先说qqcallback404:这段时间一直在琢磨youbbs的QQ登陆问题,最初是登陆时点击账户出现404先发了第一个帖子,见http://youbbs.sinaapp.com/t/890 搞来搞去把rewrite也搞废了,重新安装rewrite后 想着应该不是rewrite组件的原因 看了看.hatcass 尝试着将RewriteRule 404 /404.html移到规则的最下面,这下不404了
之前是用的get_info的方式 也就是腾讯微博验证 与get_user_info的差别youbbs在这里回复5、6楼也有介绍http://youbbs.sinaapp.com/t/293 测试账号没有开通微博 提示未开通或不足3个月(默认是这样)以为屏蔽或修改这个判断if(!$regtime || ($timestamp - $regtime)<7776000))也就不觉得奇怪了 但是我添加另一个QQ测试依然无法登陆,用这个get_user_info一直是403,找了2个有相同问题的帖子http://youbbs.sinaapp.com/t/310 、http://youbbs.sinaapp.com/t/538 没解决。网上找php session相关的 确实也打开了 查看保存的sess文件时发现问题了
再找php qq登录 在这里http://www.alixixi.com/program/a/2012111785305.shtml 发现果然是php.ini的原因 file_get_content默认不支持访问https,如果要支持需配置php.ini,激活 php_openssl.dll 模块。或者可以用curl函数来替代。这里可以看到一些值都获取到了
修改/api下qq_utils.php 将
function get_url_contents($url)
{
if (ini_get("allow_url_fopen") == "1")
return file_get_contents($url);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
替换为:
function get_url_contents($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
return $result;
}