Как добавить многомерный массив в SOAP-запрос (WSDL) - PullRequest
0 голосов
/ 10 апреля 2019

В настоящее время я пытаюсь отправить некоторые данные заказа с помощью клиента SOAP на PHP.

Большая часть запроса работает и выглядит просто отлично, данные попадают на другую сторону.

Однако многомерная часть массива игнорируется и не отправляется в запросе.

Весь массив "дочерние элементы" в "cedOrderRows" игнорируется в моем запросе.

Пример массива / данных - https://pastebin.com/4aiZTLjz

Я пробовал несколько различных структур массива, и ни одна из них, похоже, не работает, из того, что я видел в других публикациях / темах, похоже, это способ добавить несколько элементов массива (с тем же ключом) к SOAP-запросу.

Я вызываю эту функцию "CEDCreateB2COrder" / "CEDCreateB2COrderRequest"

<xsd:element name="CEDCreateB2COrderRequest">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="custCode" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="payCond" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="currency" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="payRef" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="custName" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="address1" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="address2" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="postalAdd" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="state" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="countryCode" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="webOrderId" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="webOrderNo" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="freight" minOccurs="0" maxOccurs="1" type="xsd:double"/>
            <xsd:element name="freightTax" minOccurs="0" maxOccurs="1" type="xsd:double"/>
            <xsd:element name="orderDate" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="phone" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="email" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="ordertotal" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="vat" minOccurs="0" maxOccurs="1" type="xsd:string"/>
            <xsd:element name="cedOrderRows" minOccurs="0" maxOccurs="1" type="tns:cedOrderRow"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

Каждая «строка заказа» должна содержать ....

<xsd:complexType name="cedOrderRow">
    <xsd:sequence>
        <xsd:element name="artCode" minOccurs="0" maxOccurs="1" type="xsd:string"/>
        <xsd:element name="qty" minOccurs="0" maxOccurs="1" type="xsd:int"/>
        <xsd:element name="orderLinePrice" minOccurs="0" maxOccurs="1" type="xsd:double"/>
        <xsd:element name="orderLinePricePerUnit" minOccurs="0" maxOccurs="1" type="xsd:double"/>
        <xsd:element name="orderLineTax" minOccurs="0" maxOccurs="1" type="xsd:double"/>
    </xsd:sequence>
</xsd:complexType>

Мой код SOAP-запроса выглядит так ....

$options = array(
    'exceptions' => true,
    'trace' => 1,
    'cache_wsdl' => WSDL_CACHE_NONE,
    'connection_timeout' => 60,
);


$client = new SoapClient(TARGET_URL, $options);
$result = new stdClass();

try {
    // $result->data = $client->CEDCreateB2COrder($data); // THIS GIVES THE SAME RESULT
    $result->data = $client->__soapCall('CEDCreateB2COrder', array($data));
    $result->req = $client->__getLastRequest();
} catch (Exception $e) {
    $result->request = $client->__getLastRequest();
    $result->response = $client->__getLastResponse();
    $result->e = $e->getMessage();
}

return $result;

И мой __ getLastRequest () возвращает ....

<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.com">
    <soap-env:body>
    <ns1:cedcreateb2corderrequest>
            <ns1:custcode>W1000</ns1:custcode>
            <ns1:paycond>CHE</ns1:paycond>
            <ns1:currency>EUR</ns1:currency>
            <ns1:payref>ManualOrderRef</ns1:payref>
            <ns1:custname>Foo Bar</ns1:custname>
            <ns1:address1>Street 1</ns1:address1>
            <ns1:postaladd>1234 City</ns1:postaladd>
            <ns1:countrycode>CE</ns1:countrycode>
            <ns1:weborderid>1875</ns1:weborderid>
            <ns1:weborderno>WS18750</ns1:weborderno>
            <ns1:freight>39.2</ns1:freight>
            <ns1:freighttax>9.8</ns1:freighttax>
            <ns1:orderdate>190410</ns1:orderdate>
            <ns1:phone>0000000000</ns1:phone>
            <ns1:email>foo@bar.com</ns1:email>
            <ns1:ordertotal>1477.30</ns1:ordertotal>
            <ns1:cedorderrows></ns1:cedorderrows>
        </ns1:cedcreateb2corderrequest>
    </soap-env:body>
</soap-env:envelope>

И, как вы видите, ns1: cedorderrows (около дна) пуст.

Как правильно / правильно добавить элементы многомерного массива в мой SOAP-запрос?

Заранее спасибо!

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