2016-12-22 25 views
2

我一遍又一遍地读到http://php.net/manual/en/book.soap.php。我不明白我是否应该使用SoapClient的SoapServer。看来我的应用程序应该是服务器。这次尝试和错误对我来说并不奏效。用PHP接收SOAP进程

情况:程序会将每隔这么多分钟的数据发送到我的应用程序的URL。我知道它在我做echo file_get_contents('php://input')时收到数据,这似乎很愚蠢,开始用simplexml_load_string()解析这个,或者其他任何东西(不是我管理的)。

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope 

....

<SOAP-ENV:Body> 

...

<SOAPSDK1:PostData xmlns:SOAPSDK1="http://tempuri.org/message/">  <tcXML> 
&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;&lt;shop 

我认为这应该是足够的代码来理解这个概念。它是<tcXML>之后的部分,我想将其加载到PHP对象中。

以从PHP的文档的例子:

function test($x) 
{ 
    return $x; 
} 

$server = new SoapServer(null, array('uri' => "http://test-uri/")); 
$server->addFunction("test"); 
$server->handle(); 

我不明白URI我需要提供,因为我刚刚收到的数据?

然后我想:那我需要SoapClient类外,像这样:

$client = new SoapClient(null, array('location' => "http://localhost/soap.php", 
            'uri'  => "http://test-uri/", 
            'style' => SOAP_DOCUMENT, 
            'use'  => SOAP_LITERAL)); 

在这里,我需要一些urilocation再次提供。我无法围绕它思考。这些类甚至用于这些东西吗?我在这里问正确的问题吗?欢迎任何指导!

回答

0

当你想使用(或消费)别人SOAP Web服务,您使用SoapClient类。

当你想通过Web服务使您的应用程序的零件他人消费,您使用SoapServer类。

在你的情况,另一个进程正在发送您的应用数据,所以你需要为了使您的应用程序的一部分来接收数据。所以你是对的 - 你可以使用SoapServer类。

PHP内置的SoapServer类会自动为您解析XML请求,并将其转换为您可以在代码中使用的对象。如果您发现自己需要手动解析XML,那么您做错了什么,并且使用正常的XML-RPC样式API可能会更好。

URI字段主要用于XML命名空间。

SoapClient中的location参数是Web服务端点。如果您正在使用具有多个端点的SOAP API,则此功能非常有用,它允许指定您想要的一个。