zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

调试应用原理通信 出现 失败 结合 其它
2023-09-27 14:24:59 时间
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);



支付宝小程序调用本机WEB服务API 本机部署了WEB服务端,怎样将本地的WEB服务映射到外网,提供给支付宝小程序调用? 本文将介绍使用holer实现的将自己的WEB服务映射到外网具体步骤。