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

特别注意,整合前,一定要进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 */

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值