特别注意,整合前,一定要进dz论坛的后台-----站长----ucenter设置,把免激活设置下,否则,你在测试向论坛同步注册并登录时,可能会一直登录不成功.又找不到原因.
一,关于从论坛向你的网站中同步.
我们的系统,比如织梦系统,如果要接收来自论坛等其它系统发来的会员信息,并同步登录或注册,就需要我们的系统中有一个接口,
这个接口就是本系统根目录中的api/uc.php,他是ucenter与我们的系统通信的核心文件.
如果要调试,比如你们的系统网址为 www.123.com 那么,www.123.com/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@163.com';//邮箱
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' => 'http://www.discuz2.com',
'ip' => '',
'viewprourl' => '',
'apifilename' => 'uc.php',
'charset' => '',
'dbcharset' => '',
'synlogin' => '1',
'recvnote' => '1',
'extra' => false,
'tagtemplates' => '',
'allowips' => '',
),
2=>
array (
'appid' => '2',//另一个应用,这里是你的网站应用id,在uc后台查看
'type' => '其它',
'name' => '另一个应用网站',
'url' => 'http://www.viq.com',//你的网站首页网址
'ip' => '',
'viewprourl' => '',
'apifilename' => 'uc.php',
'charset' => '',
'dbcharset' => '',
'synlogin' => '1',//1表示自动登录功能开启
'recvnote' => '1',
'extra' => false,
'tagtemplates' => '',
'allowips' => '',
),
);
?>
如果这里存在你的应用,还是没法把会员同步到本地系统中,则可以这样调试.
1,先用对方应用测试网址,比如是你的论坛的网址进行登录测试,假如是 www.234.com,那么,
先修改论坛目录中的,这个文件,\uc_client\client.php 找到uc_user_synlogin 函数,在return $return;的前面增加这一句print_r($return);exit;
然后
打开,
www.234567.com/member.php?mod=logging&action=login ,则直接打开上面的这个地址,如果打开的是空白.右右键查看源码,就能看到返回同步登录代码了.代码可能是这样的
<script type="text/javascript" src="http://www.viq.com/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中打印结果调试
<?php
require_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,用户名登录uc
if($status_id>=1){//成功登录uc
echo $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,并更新ucid
print_r(-1);exit;
}
/* End of file index.php */
/* Location: ./index.php */