将 UCenter 事件导入 Discuz! X1.5 家园

最初做站便是从 Discuz! 开始,还记得当年用的版本是6.0,论坛关闭以后便没再继续使用。两年多过去了,现在的版本已经发展到了Discuz! X1.5。可以说 Discuz! X1.5 将 UCHome 和 Discuz! 论坛很好的整合在了一起。

UCenter 对于站长来说是个很好的平台和工具,利用 UCenter 可以将很多程序的会员系统整合在一起,不仅仅是会员系统,还包括用户事件(feed)、短消息等。

一直使用 UCenter 整合使用 hdwiki、phpcms 等程序,最近开始测试 Discuz! X1.5。一段时间后发现 UCenter 后台中的用户事件积累了很长的列表,没有通知到 Discuz! X 的家园。到dz论坛去找答案,发现很多人有我同样的问题,不过都没有很好的办法解决,无奈之下,只好自己动手。

从论坛中得知 UCHome 可以显示 UCenter 中其他应用的事件,研究了相关代码后发现,UCHome 通过程序的计划任务定时获取 UCenter 中的事件并导入到 UCHome 数据库,某个目录下 cron/getfeed.php 的脚本,而 Discuz! X 的计划任务中则没有这一项。

那么我们只需要改造一下这个脚本,让它在 Discuz! X 下工作就可以了,还是不废话了,直接贴出源码: 继续阅读

Discuz!通行证(Discuz! Passport)错误提示详解

今天不知道为什么我的Discuz!和PHPCMS整合出现了一些问题,经过反复查验问题出在Discuz!上面,具体原因尚未查明,问题还未解决。找来下面的错误解释,留作备用,可能对跟我同样需要的朋友会有用。

1、Illegal request

非法请求,当验证字串 verify 不匹配时会产生此提示。可能是应用程序与 Discuz! 配置的私有密匙不同,或是通过 URL 传递前,未将必要的参数(如 auth、forward 等)进行 URL 编码,也有可能是使用了经过 URL 编码的参数值用来计算 verify 的 md5 值造成。以 PHP 语言为例,正确的代码应当是类似于的如下的格式:

PHP代码
  1. $action = ‘login’;  
  2. $auth = passport_encrypt(passport_encode($autharray), $passport_key);  
  3. $forward = ‘http://www.discuz.net/index.php’;  
  4. $verify = md5($action.$auth.$forward.$passport_key);  
  5.   
  6. header(”Location: http://www.discuz.net/api/passport.php“.  
  7. “?action=$action”.  
  8. “&auth=”.rawurlencode($auth).  
  9. “&forward=”.rawurlencode($forward).  
  10. “&verify=$verify”);  

2、Lack of required parameters

auth 内容解密后,缺少必要的信息 time、username、password、email。

3、Request expired

请求过期。当前服务器时间与应用程序提交过来的 time 之差大于 Discuz! Passport 中设置的请求有效期。可能是使用以往的代码非法尝试,也可能是由于应用程序和 Discuz! 论坛所在的两台服务器,时间设置有误造成。

4、Invalid action

没有指定 Passport 所执行的 action。