2012-02-24 140 views
0

我正在嘗試使用PHP創建Web服務。下面是我的代碼 -PHP SOAP客戶端發送XML

Web服務器 -

require 'inventory_functions.php'; 

ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache 
$server = new SoapServer("inventory.wsdl"); 
$server->addFunction("getItemCount"); 
$server->handle(); 

Inventory_functions.php -

function getItemCount($upc){ 
    //in reality, this data would be coming from a database 
    $items = array('12345'=>5,'19283'=>100,'23489'=>'234'); 
    return $items[$upc]; 
} 

我的客戶測試 -

ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache 
$client = new SoapClient("http://www.xxx.co.uk/service/inventory.wsdl"); 
$return = $client->getItemName('12345'); 
print_r($return); 

當我運行這個everythign是OK。數字「5」將在我的瀏覽器中輸出。我真的需要的是如何通過XML向SOAP服務器發送數據的一些幫助,他們將把這些數據添加到MySQL中。

我該如何發送XML vie客戶端測試?

謝謝

回答

0

我不知道我理解你的問題。你想知道什麼XML輸入應該給你的網絡服務,以便發送例如值「5」?

爲了做到這一點,您應該首先分析生成的wsdl文件,然後根據您選擇的客戶端編程語言,您可以生成客戶端存根以與Web服務本身進行交互。

或者,你可以發出直接與XML的Web服務的HTTP POST(應該是這個樣子):

POST /service/mywebservice.php HTTP/1.1 
Host: www.xxx.co.uk 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "<your.webservice.namespace>/getItemCount" 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <getItemCount xmlns="<your.webservice.namespace>"> 
     <value>5</value> 
    </getItemCount> 
    </soap:Body> 
</soap:Envelope> 
+0

我現在明白了,你真正想要的是發送XML到Web -服務。爲了做到這一點,你不能簡單地改變getItemCount PHP函數爲了接收一個字符串作爲輸入?如果你這樣做,客戶端可以將XML作爲字符串發送到函數getItemCount。爲了在將XML字符串嵌入Soap請求時避免混亂,您可以在發送之前將原始XML轉換爲base64字符串。 – bpatrao 2012-02-24 13:03:39