如何从PHP访问XML-RPC数据?

时间:2011-04-02 11:34:51

标签: php xml xml-rpc

远程服务器通过RPC将XML发布到我的服务器。当我启用mod安全性时,我可以在Apache日志中看到XML,但是我无法从PHP脚本访问XML。它应该是一个POST请求,但是$ _POST数组是空的。

我的理解是RPC应该用数据调用我的函数,但这似乎没有发生。

这个非常简单的脚本应该将XML写入日志文件,但它什么都不做:

include_once('xmlrpc/xmlrpc.inc');
include_once('xmlrpc/xmlrpcs.inc');

function ImportOrders($xml)
{
   $FH=fopen('Log/In.txt','a');
   fwrite($FH,'Package recieved:'.print_r($xml,true)."\n");

   // set appropriate response code
   $response = 0; // see defined response codes for this application
   // send success or failure response code
   if($response == 0)
      return new xmlrpcresp(new xmlrpcval($response, "string"));
   else
      return new xmlrpcresp(0, $response, $error_message);
}

$Server = new xmlrpc_server(
   array("ImportOrders"=>array("function"=>"ImportOrders")
   )
);

他们发给我的是:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<methodCall>
<methodName>ImportOrders</methodName>
<params>
<param>
<value><int>2</int></value>
</param>
<param>
<value><struct>
<member><name>order_0</name>
<value><struct>
<member><name>order_id</name>
....

为什么不调用我的函数?!?

1 个答案:

答案 0 :(得分:2)

知道了!显然,数据位于“$ GLOBALS ['HTTP_RAW_POST_DATA']”。

require 'kd_xmlrpc.php';
$xmlrpc_request = XMLRPC_parse($GLOBALS['HTTP_RAW_POST_DATA']);  
$methodName = XMLRPC_getMethodName($xmlrpc_request);    
$params = XMLRPC_getParams($xmlrpc_request);    

ImportOrders($params);

function ImportOrders($params)
{
   $FH=fopen('Log/In.txt','a');
   fwrite($FH,'OrderDataRes has been loaded.'."\n");
   fwrite($FH,'$params: '.print_r($params,true)."\n");
}

我也在使用不同的库,来自: http://www.keithdevens.com/software/xmlrpc/source.php