您的位置:首页 > 编程语言 > PHP开发

uc.php接口调试,ucenter整合对接自己的系统的方法及Authracation has expiried原因

2016-09-10 00:44 681 查看
特别注意,整合前,一定要进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] view plain copy







<?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 */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息