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

2024-02-14 19:32

本文主要是介绍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');


这篇关于ucenter与其它应用结合时出现通信失败,ucenter应用原理与调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/709396

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.