2016-12-22 33 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,則此功能非常有用,它允許指定您想要的一個。