PHP Soap - Как удалить xsi: type = из тега XML - PullRequest
0 голосов
/ 22 сентября 2011

Я отправляю SOAP-запрос, который выглядит следующим образом:

<SOAP-ENV:Body>
  <api:GetOrder xsi:type="SOAP-ENC:Struct">
    <api_orderId xsi:type="xsd:int">1234</api_orderId>
  </api:GetOrder>
</SOAP-ENV:Body>

Но должен выглядеть так (генерируется SoapUI):

<soapenv:Body>
  <api:GetOrder>
    <api:orderId>1234</api:orderId>
  </api:GetOrder>
</soapenv:Body>

Мой код PHP:

$client = $this->getConnection();
$soap_options = array('soapaction' => $config->getValue('soapaction_url') . 'GetOrder');
$obj = new stdClass();
$obj->api_orderId = 59698;

$results = $client->__soapCall('GetOrder', array(new SoapParam($obj, "api:GetOrder")), $soap_options);

2 вопроса действительно:

1) Как я могу удалить «xsi: type» из запроса? (Если я добавлю xsi: type в мой запрос SoapUI, я получу «400 неверных запросов»

2) Вместо «api_orderId» мне нужно отправить «api: orderId», но я не могу назвать объект с двоеточием, поэтому я должен как-то передать имя и значение в виде массива?

Спасибо за любую помощь, спасибо.

EDIT:

Мне не удалось найти какой-либо другой способ отправки этих запросов, и я, по сути, в итоге поступил так, как предложил мистер К. ниже. Я написал собственный класс для расширения SoapClient. Затем переопределите метод __doRequest для отправки собственного пользовательского запроса SOAP.

Единственным недостатком является то, что SOAP больше не возвращает мне массив объектов, поэтому мне также пришлось анализировать XML-ответ SOAP. Также я подозреваю, что производительность при этом немного ниже, но я этого не заметил.

1 Ответ

0 голосов
/ 23 сентября 2011

Попробуйте с помощью простого анализа XML и создайте новый запрос, как вам нравится.

Считайте значения тега из исходного запроса, присвойте эти значения новому объекту XML, используя синтаксический анализ. Вы можете создать строку сообщения XML и загрузить ее как объект XML в PHP.

Точно так же, как получить его оттуда, положить в это ... и отправить! ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...