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');


相关文章
|
JavaScript 数据库
uni-app头像上传(完善个人信息功能),后端NodeJs+MySQL
uni-app头像上传(完善个人信息功能),后端采用的是NodeJs(express.js),数据库采用的是MySQL
|
1月前
uni-app 62websocket连接权限验证和强制下线
uni-app 62websocket连接权限验证和强制下线
20 3
|
5月前
|
JavaScript 前端开发
uni-app学习笔记-请求接口跨域问题(八)
uni-app学习笔记-请求接口跨域问题(八)
192 0
|
6月前
|
数据采集 Web App开发 安全
如何在Puppeteer中设置User-Agent来绕过京东的反爬虫机制?
如何在Puppeteer中设置User-Agent来绕过京东的反爬虫机制?
|
9月前
|
前端开发 JavaScript 关系型数据库
宝塔设置PHP定时任务实战记录(定时任务、ajax异步刷新API、shell脚本、访问url)
宝塔设置PHP定时任务实战记录(定时任务、ajax异步刷新API、shell脚本、访问url)
477 0
|
9月前
|
API
解决微信后台禁用url问题
由于目前用的平台,域名都没有在微信授权,所以被微信给禁用了,我们现在用一个接口可以绑定域名的平台转发一下,演示选择使用vscode工具,其它有终端的工具亦可。
解决微信后台禁用url问题
|
安全 前端开发 JavaScript
uni-app进阶之https请求方式/状态管理【day11】
uni-app进阶之https请求方式/状态管理【day11】
uni-app进阶之https请求方式/状态管理【day11】
uni-app中网络请求封装及登录授权
uni-app中网络请求封装及登录授权
234 0
|
中间件 数据库
【Node.js+koa--后端管理系统】用户登录接口设计 | 登录验证 | 登录返回凭证(令牌)
【Node.js+koa--后端管理系统】用户登录接口设计 | 登录验证 | 登录返回凭证(令牌)
242 0
【Node.js+koa--后端管理系统】用户登录接口设计 | 登录验证 | 登录返回凭证(令牌)
|
存储 中间件 关系型数据库
【Node.js+koa--后端管理系统】用户注册接口设计 | 连接Mysql数据库 | 校验注册权限
【Node.js+koa--后端管理系统】用户注册接口设计 | 连接Mysql数据库 | 校验注册权限
226 0
【Node.js+koa--后端管理系统】用户注册接口设计 | 连接Mysql数据库 | 校验注册权限