特别注意,整合前,一定要进dz论坛的后台-----站长----ucenter设置,把免激活设置下,否则,你在测试向论坛同步注册并登录时,可能会一直登录不成功.又找不到原因.
一,关于从论坛向你的网站中同步.
我们的系统,比如织梦系统,如果要接收来自论坛等其它系统发来的会员信息,并同步登录或注册,就需要我们的系统中有一个接口,
这个接口就是本系统根目录中的api/uc.php,他是ucenter与我们的系统通信的核心文件.
如果要调试,比如你们的系统网址为 那么,/api/uc.php ,这个打开,就可以调试了.
但是uc.php文件需要注释掉一些信息,才方法调试.
uc.php的上面,通常有这么一段.
if(!defined('IN_UC')){error_reporting(0);@set_magic_quotes_runtime(0);defined('MAGIC_QUOTES_GPC') || define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());$_DCACHE = $get = $post = array();$code = @$_GET['code'];parse_str(_authcode($code, 'DECODE', UC_KEY), $get);if(MAGIC_QUOTES_GPC){$get = _stripslashes($get);}$timestamp = time();if($timestamp - $get['time'] > 3600) {exit('Authracation has expiried');}if(empty($get)) {exit('Invalid Request');}$action = $get['action'];require_once UC_CLIENT_ROOT.'/lib/xml.class.php';$post = xml_unserialize(file_get_contents('php://input'));if(in_array($get['action'], array('test', 'DELETE user', 'renameuser', 'gettag', 'synlogin', 'synlogout', 'updatepw', 'updatebadwords', 'updatehosts', 'updateapps', 'updateclient', 'updatecredit', 'getcreditsettings', 'updatecreditsettings'))){$uc_note = new uc_note();exit($uc_note->$get['action']($get, $post));}else{exit(API_RETURN_FAILED);}
有这一段,显示没法调试.
我们可以把他简化为下面这种,就可以直接访问uc进行调试了.注意先备份原文件
if(!defined('IN_UC')) {defined('MAGIC_QUOTES_GPC') || define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());$DBModel = new db_model();$get = $post = array();$get['uid']=2;//uc服务器发来get请求,用户id$get['username']='121212';//假如这是发来的用户名$get['email']='1@';//邮箱include_once DISCUZ_ROOT.'./uc_client/lib/xml.class.php';$post = xml_unserialize(file_get_contents('php://input'));$uc_note = new uc_note(); //去掉参数.并$get['action']修改为上面的任何一个.比如test,deleteuser,然后刷新uc.php就可以直接访问api/uc.php来测试了,比如echo $uc_note->synlogout($get, $post);//或echo $uc_note->synlogin($get, $post);exit();} else {exit;}
另外,uc.php里面的代码,即恢复后,进行实际部署时,可能会遇到一些小错误.
if(!defined('IN_UC')) {
//这是你上面简化的代码需要恢复成原来的.
}
,在实际测试具体的登录效果时,可能会出现这种错误,Authracation has expiried
出现这个原因一般是本应用中的api/uc.php 没有get到对方应用或论坛的uc_client发过来的数据.具体可以查看对方应用的\uc_client\data\cache\apps.php 这个文件.打开看下里面有几个应用.如果只有论坛这一个应用.没 有你的系统对应的应用,那么,就算是后台提示通信成功.依然没法从论坛同步到你的网站中.里面的内容应该是类似这样的,才正常
<?php$_CACHE['apps'] = array (1 => array ('appid' => '1',//这是里论坛应用.如果只有这一个,则没法同步登录'type' => 'DISCUZX','name' => 'Discuz! Board','url' => '','ip' => '','viewprourl' => '','apifilename' => 'uc.php','charset' => '','dbcharset' => '','synlogin' => '1','recvnote' => '1','extra' => false,'tagtemplates' => '','allowips' => '',),2=> array ('appid' => '2',//另一个应用,这里是你的网站应用id,在uc后台查看'type' => '其它','name' => '另一个应用网站','url' => '',//你的网站首页网址'ip' => '','viewprourl' => '','apifilename' => 'uc.php','charset' => '','dbcharset' => '','synlogin' => '1',//1表示自动登录功能开启'recvnote' => '1','extra' => false,'tagtemplates' => '','allowips' => '',),);?>
如果这里存在你的应用,还是没法把会员同步到本地系统中,则可以这样调试.
1,先用对方应用测试网址,比如是你的论坛的网址进行登录测试,假如是 ,那么,
先修改论坛目录中的,这个文件,\uc_client\client.php 找到uc_user_synlogin 函数,在return $return;的前面增加这一句print_r($return);exit;
然后
打开,
/member.php?mod=logging&action=login ,则直接打开上面的这个地址,如果打开的是空白.右右键查看源码,就能看到返回同步登录代码了.代码可能是这样的
<script type="text/javascript" src="/api/uc.php?
time=1473493067&cFZXnemDwjNj1UQRQgARt5bqUMwCp38i5Myk6g"
reload="1"></script>
然后找到src=""里面的网址,直接打开,就能看到uc.php 中提示的内容
如果没有内容.可以注释掉uc.php中的error_reporting(0);
并且在下面这个代码的下面增加一个输出打印功能,即print_r($get);exit; 效果如下
if(MAGIC_QUOTES_GPC) {$get = _stripslashes($get);}
print_r($get);exit;
二,从你的网站应用向uc及discuz论坛同步时,怎么测试.
一个简单方法是,在你的应该的根目录中,建立一个test.php文件,里面的内容为
用户名及密码为121212 这个是你事先注册好的.可以直接测试登录问题.用你的域名运行/test.php后右键查看源码,就以看到应用测试网站,直接打开,就能在论坛的/api/uc.php中打印结果调试
<?phprequire_once('root/config/uc.php');//这是从ucenter中复制的数据库连接配置require_once 'uc_client/client.php';//这个是本网站应该中的uc客户端list($status_id, $uc_username, $uc_password, $uc_email) = uc_user_login(121212,121212 , 0);//0,用户名登录ucif($status_id>=1){//成功登录ucecho $synlogin=uc_user_synlogin($status_id);//同步登录其它应用//var_dump(uc_user_synlogin($status_id));exit;//print_r(uc_user_synlogin($status_id));exit;//$this->jump(-1);//成功,跳转}if($status_id==-2){//echo 'uc密码错误,建议修改';print_r(-2);exit;}if($status_id==-1){//uc中用户名不存在,则插入uc,并更新ucidprint_r(-1);exit;}/* End of file index.php *//* Location: ./index.php */