Я очень мало знаю о XML и SOAP запросах, но я нахожусь в ситуации, когда мне приходится использовать веб-сервис, использующий PHP для отправки и получения данных для моего приложения, поэтому любая помощь будет принята .
Веб-служба представляет собой службу WSDL, она предоставляет функцию с именем processIncomingMessage()
и ожидает, что тело конверта SOAP будет выглядеть следующим образом:
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<processIncomingMessageRequest xmlns="http://icis.externaldomain.services.ws">
<!-- Optional -->
<messageRequest xmlns="">
<DigitallySignedMessage>
<xmlMessage>[anyType]</xmlMessage>
</DigitallySignedMessage>
</messageRequest>
</processIncomingMessageRequest>
</Body>
</Envelope>
Поэтому, когда я получаю значения формы в JSON, я продолжаю так:
//convert JSON to array
$data = json_decode($json, true);
//convert array to XML
$xmlMessage = ArrayToXml::convert($data, $root);
//set the function arguments
$messageRequest = [
"messageRequest" => [
"DigitallySignedMessage" => [
"xmlMessage" => $xmlMessage,
"isXmlString" => $isXmlString,
"messageType" => $messageType
],
"traderID" => $traderID,
"wsPass" => $wsPass,
"wsUserID" => $wsUserID
]
];
//create soap client instance
$client = new SoapClient($wsdl, $soapOptions);
//call the SOAP function and save the response in a var
$response = $client->processIncomingMessage($messageRequest);
ArrayToXml
использует класс DOMDocument
для создания xml, и я его здесь: https://github.com/spatie/array-to-xml/blob/master/src/ArrayToXml.php
Теперь, несмотря на то, что я проверял XML, созданный выше, по предоставленному файлу xsd и на веб-сайте веб-службы с их собственным инструментом, ответ SOAP выглядит следующим образом:
status: Invalid Argument
explanation: XML Message String but class is class com.sun.org.apache.xerces.internal.dom.ElementNSImpl
Понятия не имею, что я здесь делаю неправильно ... Может ли кто-нибудь пролить свет?