PHP SOAP клиент отправляет XML - PullRequest
0 голосов
/ 24 февраля 2012

Я пытаюсь создать веб-сервис с PHP. Вот мой код -

Веб-сервер -

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);

Когда я бегу, с этим все в порядке. число «5» будет выводиться в моем браузере. Что мне действительно нужно, так это некоторая помощь в том, как отправлять данные через XML на SOAP-сервер, поэтому я добавлю эти данные в MySQL.

Как бы я отправил XML через клиентский тест?

Спасибо

1 Ответ

0 голосов
/ 24 февраля 2012

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

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

В качестве альтернативы, вы можете выдать HTTP POST с 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>
...