ucenter与其它应用结合时出现通信失败,ucenter应用原理与调试

简介: ucenter与其它应用结合时出现通信失败 ucenter是一个用户中心,多个应用可以使用ucenter,这样用户就有了通行证,不用一次一次地去注册不同的用户名了 现在的互联网的用户中心差不多就是腾讯的用户中心了,因为大家都有QQ号 但是自己做应用的时候如何加入ucenter这样的文章网上好多 自定义的应用,在加入应用列表后,ucenter会检测是否与应用通讯正常,有时会失败,
+关注继续查看
ucenter与其它应用结合时出现通信失败
ucenter是一个用户中心,多个应用可以使用ucenter,这样用户就有了通行证,不用一次一次地去注册不同的用户名了
现在的互联网的用户中心差不多就是腾讯的用户中心了,因为大家都有QQ号


但是自己做应用的时候如何加入ucenter这样的文章网上好多
自定义的应用,在加入应用列表后,ucenter会检测是否与应用通讯正常,有时会失败,
他的原理是去一个网址检测他的返回值,地址一般是这样的
 testlink="admin.php?m=app&a=ping&inajax=1&url=http%3A%2F%2F192.168.0.89%3A5635&ip=&appid=3&random=14230"
回应这个链接的function 是/admin/app.php/中的onping这个函数
这个函数的作用是去访问你在配置应用时加入的参数,一般情况下这个地方的的网址是
 http://192.168.0.89:5619/api/uc.php?code=28b4P9649Mub1wWGejarHl214enhA2Xt7vLkJPBskk50AwqDza8Ehx0T5%2FNwGtsBdB%2BmZ%2FTCibQ
 这个code是一个加密的字符串,
 到了api/uc.php中会对code进行解码,解码出来大体上就是这样的字符串
 action=test&time=1321131313

 包含两个参数,调用的函数与调用的时间,这样只返回值是1就可以了,就可以通讯成功了

$get = $post = array();
$code = strval(@$_GET['code']); 
parse_str(uc_api_x_authcode($code, 'DECODE', UC_KEY), $get);
$timestamp = time();
if (empty($get))
{
    die('Invalid Request');
} elseif ($timestamp - $get['time'] > 3600)
{
     die('Authracation has expiried');
}
$action = $get['action'];
$post = xml_unserialize(file_get_contents('php://input'));
 
if (in_array($get['action'], array(
    'test',
    'renameuser',
    'synlogin',
    'synlogout',
    'updatepw',
))
)
{
    $funcname = "uc_api_{$get['action']}";    
    if (function_exists($funcname))
    {
        exit($funcname($get, $post));
    }
}
exit(API_RETURN_FAILED);

/* communicate with ucenter */
function uc_api_test($get, $post) {
    return API_RETURN_SUCCEED;
}
/**/


看一下服务端做了哪些操作,在每次打开应用列表时,遍历应用并向应用发onping测试,函数在

Ucenter中control/admin/app.php中的onping()函数


		if($app['extra']['apppath'] && @include $app['extra']['apppath'].'./api/'.$app['apifilename']) {

			$uc_note = new uc_note();
			$status = $uc_note->test($note['getdata'], $note['postdata']);
		} else {

			$this->load('note');
			$url = $_ENV['note']->get_url_code('test', '', $appid);
			//die($url);
			//var_dump($_ENV['app']);die();
			$status = $_ENV['app']->test_api($url, $ip);
		}


如果调用返回结果为1那些显示成功,否则显示失败,test_api在model/app.php文件中



	function test_api($url, $ip = '') {
		$this->base->load('misc');
		if(!$ip) {
			$ip = $_ENV['misc']->get_host_by_url($url);
		}

		if($ip < 0) {
			return FALSE;
		}
		return $_ENV['misc']->dfopen($url, 0, '', '', 1, $ip);
	}


去调用misc.php中的dfopen函数
dfopen函数使用php的底层函数fsockopen去与程序通信,将通信的结果返回onping函数,如果为1那么显示通信成功,否则显示失败

为了方便调试我们可以在dfopen中信息,将输入及输出的值记录到文件中,

error_log("[uc_server]\r\nurl: $url\r\npost: $post\r\n\r\n", 3, 'c:/log/php_fopen.txt');


相关文章
|
2月前
|
前端开发 JavaScript 关系型数据库
宝塔设置PHP定时任务实战记录(定时任务、ajax异步刷新API、shell脚本、访问url)
宝塔设置PHP定时任务实战记录(定时任务、ajax异步刷新API、shell脚本、访问url)
106 0
|
4月前
|
存储 C# 数据库
Qt+QtWebApp开发笔记(四):http服务器使用Session和Cookie实现用户密码登录和注销功能
前面实现了基础的跳转,那么动态交互中登录是常用功能。本篇实现一个动态交互的简单登录和注销功能,在Qt中使用Session和Cookie技术。
|
8月前
|
Web App开发 Windows
webRTC:jssip登录freeswitch的正确办法及代码
webRTC:jssip登录freeswitch的正确办法及代码
385 0
webRTC:jssip登录freeswitch的正确办法及代码
|
9月前
|
SQL API 数据库
easyswoole快速实现一个网站的api接口程序
easyswoole快速实现一个网站的api接口程序
62 0
easyswoole快速实现一个网站的api接口程序
|
11月前
|
中间件 数据库
【Node.js+koa--后端管理系统】用户登录接口设计 | 登录验证 | 登录返回凭证(令牌)
【Node.js+koa--后端管理系统】用户登录接口设计 | 登录验证 | 登录返回凭证(令牌)
166 0
【Node.js+koa--后端管理系统】用户登录接口设计 | 登录验证 | 登录返回凭证(令牌)
|
API PHP
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由(2)
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由
68 0
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由(2)
|
中间件 API PHP
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由(1)
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由
81 0
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由(1)
|
中间件
Laravel_post访问【419】问题解决方法
Laravel_post访问【419】问题解决方法
617 0
Laravel_post访问【419】问题解决方法
|
小程序
WeChat小程序如何实现转发功能?
WeChat小程序如何实现转发功能?
98 0
WeChat小程序如何实现转发功能?
CAS单点登录重定向service参数硬编码
先说下问题,cas单点登录地址会带入service参数,这个参数可能会被有心人利用修改浏览器地址栏带入自己的重定向地址,例如:http://localhost:6212/cas/login?service=http://www.a.com
相关产品
云迁移中心
推荐文章
更多