中国最全IT社区平台 联系我们 | 收藏本站
阿里云优惠2阿里云优惠1
您当前位置:首页 > 程序人生 > 随笔 > phpcms QQ登录无法正常登录

phpcms QQ登录无法正常登录

来源:程序员人生   发布时间:2015-05-21 16:07:27 阅读次数:4287次
现在大家应该发现。所有phpcms的网站,QQ互联也就是QQ一键登录都用不了的。不知道大家发现一个问题没有,官方的phpcms.cn网站之前都是可以用QQ登陆的,现在也不行了,原因是腾讯有更新,而官方phpcms系统更新太慢,不知道那些大爷在干什么。
首页,我们来看看腾讯有啥子更新呢
 

对于大家这个更新如果没玩过QQ互联的大家也许不懂,我来解释下

上图所示,左边是QQ互联申请的后台地址,右边是phpcms后台填写的回调地址。
phpcms回调地址必须填写http://网站域名/index.php?m=member&c=index&a=public_qq_loginnew才能使用

而现在呢,腾讯qq的回调地址不允许带参数,否则无法提交,并且要与phpcms地址的回调地址一致,才能使用。qq互联回调地址和phpcms管理中心的回调地址不一样导致qq登录报错:redirect uri is illegal(100010)

那么问题来了,phpcms必须要带参数才能使用,而腾讯带上参数又不让使用,这不是很矛盾吗。到底如何解决这个问题呢,肯定不能让腾讯修改规则,而phpcms官方更新太慢。今天下午我看网上有人搜索这个问题,自己研究了下,现在公布给大家

首页第一步,将腾讯和phpcms后台的qq回调地址统一设置成你自己的网站域名www.wfuyu.com(下面说明中,网站都以本网站www.wfuyu.com做说明,你自己填写的时候,写上你自己的网站域名即可)。
经过第一步后,点击自己网站上面的QQ登陆按钮,会显示登陆成功,并且登陆后直接返回了首页(其实没有登陆成功,只是读取了腾讯openid的数据,返回到了网站首页,phpcmss没有做任何登陆操作)

第二步,将第一步的中,腾讯qq和phpcms的网站回调地址改成www.wfuyu.com/qqcode

重复第一步登陆QQ,登陆成功后,返回首页,大家注意浏览器url地址为。www.wfuyu.com/qqcode?code=3CD919E33C50BAC0D6D56ABAC926CA62

现在接下来的目标是,将www.wfuyu.com/qqcode?code=3CD919E33C50BAC0D6D56ABAC926CA62 这个地址,指向http://www.wfuyu.com/index.php?m=member&c=index&a=public_qq_loginnew&code=3CD919E33C50BAC0D6D56ABAC926CA62
这样phpcms才会处理腾讯返回过来的qq信息

第三步,伪静态处理
将更目录下.htaccess文件 加入
RewriteCond %{QUERY_STRING} ^code=(.*)$
RewriteRule ^qqcode index.php?m=member&c=index&a=public_qq_loginnew&code=%1 [L]
这里不同的服务器规则不一样,我的是apache

现在大家明白第二步中URL为什么后台加个尾巴qqcode了吧,只是为了方便写伪静态而已,没有别的作用

经过第三步后,大家刷新自己的网站,用QQ登陆,可以显示登陆成功,也跳转到了补充信息页面。
说明:如果你到了这个步骤,如果登陆后页面是空百的
你的服务器可能因为file_get_contents无法请求https连接。
解决方案有3:
1.windows下的PHP,只需要到php.ini中把extension=php_openssl.dll前面的;删掉,重启服务就可以了。
2.linux下的PHP,就必须安装openssl模块,安装好了以后就可以访问了。
3.如果服务器你不能修改配置的话,那么就使用curl函数来替代file_get_contents函数,当然不是简单的替换,还有相应的参数配置才能正常使用curl函数。

我的网站就出现了空白,用网上搜索的方法一解决的,如果你网站不是空白,请忽略上面的文字,直接看下面图片吧,更坑爹呢
尼玛,好不容到了这步了,为啥用户名和昵称是乱码。
解决方法:
在phpcms/modules/member/index.php 大概第1348行
$connect_username = $user['nickname']; 改成$connect_username = $user;
if里面两个地方都要改

然后再重复登陆操作


这样就正常了。按道理来说,这里注册后,绑定QQ就能登陆了。可是,尼玛,不管输入什么都是说系统已经存在!!


真的是一步一个坑啊,今天研究到这里,后面的慢慢来弄吧,希望大家踊跃给我留意,把下面的问题一起来解决

持续更新中(已解决上述问题)
首先感谢各位网友对这篇文章的支持

上述ajaxValidator表单验证出错的原因是,启用了伪静态,导致ajax提交地址出错
修改方法:
打开网站文件/templates/default/member/connect.html
找到下面代码
  1. //修改用户名验证,大概在201行 
  2. url : "",  
  3. data :"m=member&c=index&a=public_checkname_ajax",  
  4. 替换成 
  5. url : "http://www.wfuyu.com/index.php?m=member&c=index&a=public_checkname_ajax"
  6. data :"http://www.wfuyu.com/index.php?m=member&c=index&a=public_checkname_ajax"
  7.  
  8. //修改用邮箱验证,大概在221行 
  9. url : ""
  10. data :"m=member&c=index&a=public_checkemail_ajax"
  11. 替换成 
  12. url : "http://www.wfuyu.com/index.php?m=member&c=index&a=public_checkemail_ajax"
  13. data :"http://www.wfuyu.com/index.php?m=member&c=index&a=public_checkemail_ajax"
  14.  
  15. //修改用昵称验证,大概在238行 
  16. url : ""
  17. data :"m=member&c=index&a=public_checknickname_ajax"
  18. 替换成 
  19. url : "http://www.wfuyu.com/index.php?m=member&c=index&a=public_checknickname_ajax"
  20. data :"http://www.wfuyu.com/index.php?m=member&c=index&a=public_checknickname_ajax",

总共需要提供的地方有三个,分别是用户名验证,邮箱验证,昵称验证,代码分别在第202行,第221行和238行左右

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
代码很风骚
积分:2243
1粉丝
5关注
热门话题
栏目热点