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');
时间: 2024-08-07 13:12:43

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

android在真机调试时手机端与pc端通信失败

问题描述 android在真机调试时手机端与pc端通信失败 我写的一个通信程序,在android模拟器与pc端可以正常通信,但是用真机调试时就连接不上,查看错误日志,显示不能连接/192.168.....? 解决方案 用的什么协议?这么看来可能是你的地址写错了 解决方案二: 你的意思是不能部署项目到手机还是网络通信的时候连接不上?如果是前者的话应该是驱动的问题或者重启下ADB,如果是后者的话你就看看你的服务器端的地址是不是可以访问,如果连接的是同一个局域网内IP地址对的话是可以的通信的,那就是代

codeigniter整合ucenter通信失败问题

问题描述 codeigniter整合ucenter通信失败问题 codeigniter整合ucenter,老是通信失败,找不到失败的原因:请大师们帮忙解决,虚心求教!有没有整合的详细.正确的教程? 解决方案 用一下GOOGLE 查詢看看

ucenter整合,通信失败,调试测试排查方法

失败是因为你的应用程序的api/uc.php中可能有错误.比如ucenter规定.只有uc.php这个文件正常返回1,才会提示通信成功.但如果你的返回了一个sql错误.而不是1,则一定是提示失败的.怎么测试呢  代码如下 复制代码 <?php include_once "config/config_global.php"; include_once "config/config_ucenter.php"; include_once "uc_clien

tcp-网速慢会影响TCP通信失败吗?

问题描述 网速慢会影响TCP通信失败吗? 我的手机是客户端,手机是2G的,网速巨慢,在往服务器端发送字符串的时候发不过去,是不是网速慢的原因啊 解决方案 是的,当网速慢时,打开的客户端长时不能回应信息,服务器认为异常退出,你的本次操作失败.只能重新登录了. 2g的速度太慢了,我用3g有时都感到慢,还是换3g吧.

安装N2000网管时提示连接数据库失败

标题: 安装N2000网管时提示连接数据库失败  序号: SC0000328366  更新时间: 2007-01-22 11:10:21  作者:    产品族: 固定核心网网管  产品: iManager N2000 UMS  故障类别: 数据库  关键字: 数据库 安装 sybase  摘要:    现象描述: 某局在安装N2000网管服务器,在设置好数据库服务配置,单击下一步,出现提示连接不到数据库,无法安装.      告警信息: 无  原因分析: 1.设置的数据库服务器名称是否正确.

netty4.3ssl通信失败-Netty4.3SSL通信失败,握手失败

问题描述 Netty4.3SSL通信失败,握手失败 使用Netty4.3连接某产品服务端,但ssl通信无法正常建立,请有经验的人联系我,可提供测试代码. QQ:31604274 解决方案 握手失败,一个可能是网络原因连接不通,还可能证书验证等有问题. 解决方案二: javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new T

QT+sqlite 用query时,在debug时,释放失败,请问为什么?

问题描述 QT+sqlite 用query时,在debug时,释放失败,请问为什么? 我把sqldatabase定义为类的数据成员:然后在某个成员函数中声明一个query. 查询数据时,并没有任何问题,但是在释放时,程序报错.说是使用了不合法的地址. 另外:如果忽略,即用release时,可以正确运行. 解决方案 自己解决了,但是非常狗血. 解决方案二: 不会,确实 不知道

filestream 文件名-C#语言用FileStream新建.XLS文件,文件名为全日语时,创建失败。

问题描述 C#语言用FileStream新建.XLS文件,文件名为全日语时,创建失败. using (FileStream fs = new FileStream(path, FileMode.Create)) { workbook.Write(fs); fs.Close(); } 用FileStream新建.XLS文件,文件名为全日语时,创建失败.路径下什么都没有,请大神帮忙看下怎么回事,谢谢了. 解决方案 这个同求解决 楼主解决了么

在生成创建的cordova项目时提示生成失败

问题描述 在生成创建的cordova项目时提示生成失败 在安装完Cordova后,创建的项目在生成时提示生成失败,输出信息如下图: 错误列表如下图: 哪位大神遇到过或知道的请尽快给予帮助啊!!先谢谢了! 另注:公司电脑没有外网,所以安装时都是下载的安装包离线安装的,在cmd中打node或你npm查看版本时也都可以输出信息,是不是在离线安装时缺少了什么东西?急! 另外,抱歉没有币了,没办法打赏了,请诸位大神帮帮忙!