Я отправляю 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.
Также я подозреваю, что производительность при этом немного ниже, но я этого не заметил.