SOAP запрос возвращает «XML Строка сообщения, но класс является классом com.sun.org. apache .xerces.internal.dom.ElementNSImpl» - PullRequest
0 голосов
/ 08 марта 2020

Я очень мало знаю о 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

Понятия не имею, что я здесь делаю неправильно ... Может ли кто-нибудь пролить свет?

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