2012-02-24 2 views
0

Я пытаюсь создать веб-сервис с PHP. Ниже мой код -PHP SOAP client send XML

Веб-сервер -

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]; 
} 

Мой клиент Test -

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 нормально. число «5» будет выводиться в моем браузере. Мне действительно нужна помощь в отправке данных через XML на SOAP-сервер, и я добавлю эти данные в MySQL.

Как отправить XML-тест клиенту?

Благодаря

ответ

0

Я не уверен, я понимаю ваш вопрос. Вы хотите знать, какой ввод XML вы должны предоставить вашему веб-сервису, чтобы отправить, например, значение «5»?

Для этого вы должны сначала проанализировать созданный файл wsdl, а затем, в зависимости от выбранного вами языка программирования для клиента, вы можете создать клиентский Stub для взаимодействия с самой веб-службой.

В качестве альтернативы, вы можете выдать POST HTTP с XML непосредственно на веб-сервиса (должно выглядеть примерно так):

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