Как правильно использовать SoapVar

Продолжаю пытаться понять SOAP в PHP. Пытаюсь интегрироватся с сервисом программы лояльности Прислали пример запроса к серверу:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
    <ProcessRequest xmlns="http://loyalty.manzanagroup.ru/loyalty.xsd">
        <request>
            <OrderRequest ChequeType="Soft">
                <RequestID>test_2019_401</RequestID>
                <OrderOperationType>Calc</OrderOperationType>
                <OperationType>Sale</OperationType>
                <DateTime>2022-06-24T15:22:05</DateTime>
                <Organization>test</Organization>
                <BusinessUnit>test</BusinessUnit>
                <POS>test</POS>
                <Card>
                    <CardNumber>test002</CardNumber>
                </Card>
                <Number>s001</Number>
                <Summ>21100.00</Summ>
                <Discount>0.000</Discount>
                <SummDiscounted>21100.00</SummDiscounted>
                <PaidByBonus>0.00</PaidByBonus>
                <Item>
                    <PositionNumber>1</PositionNumber>
                    <Article>test1</Article>
                    <Price>1000.00</Price>
                    <Quantity>1.000</Quantity>
                    <Summ>1000.00</Summ>
                    <Discount>0.000</Discount>
                    <SummDiscounted>1000.00</SummDiscounted>
                </Item>
                <Item>
                    <PositionNumber>2</PositionNumber>
                    <Article>test2</Article>
                    <Price>10000.00</Price>
                    <Quantity>2.00</Quantity>
                    <Summ>20000.00</Summ>
                    <Discount>0.000</Discount>
                    <SummDiscounted>20000.00</SummDiscounted>
                </Item>
                <Item>
                    <PositionNumber>3</PositionNumber>
                    <Article>test3</Article>
                    <Price>100.00</Price>
                    <Quantity>1.00</Quantity>
                    <Summ>100.00</Summ>
                    <Discount>0.000</Discount>
                    <SummDiscounted>100.00</SummDiscounted>
                </Item>
            </OrderRequest>
        </request>
        <orgName>test2Test</orgName>
    </ProcessRequest>
</soap:Body>

</soap:Envelope>

На PHP собрал такую поделку которая не работает:

$soap_orgName = new SoapVar('test2Test', XSD_STRING);

$soap_CardNumber = new SoapVar('test002', XSD_STRING);
$soap_Card = new SoapVar(
    [
        'Card' => $soap_CardNumber,
    ]
    , SOAP_ENC_ARRAY);

$soap_PositionNumber = new SoapVar('1', XSD_STRING);
$soap_Article = new SoapVar('test1', XSD_STRING);
$soap_Price = new SoapVar(1000.00, XSD_STRING);
$soap_Quantity = new SoapVar(1.000, XSD_STRING);
$soap_Summ = new SoapVar(1000.00, XSD_STRING);
$soap_Discount = new SoapVar(0.000, XSD_STRING);
$soap_SummDiscounted = new SoapVar(1000.00, XSD_STRING);
$soap_Item = new SoapVar(
    [
        'PositionNumber' => $soap_PositionNumber,
        'Article' => $soap_Article,
        'Price' => $soap_Price,
        'Quantity' => $soap_Quantity,
        'Summ' => $soap_Summ,
        'Discount' => $soap_Discount,
        'SummDiscounted' => $soap_SummDiscounted,
    ], SOAP_ENC_ARRAY);


$soap_ChequeType = new SoapVar('Soft', XSD_STRING);
$soap_RequestID = new SoapVar('test_2019_401', XSD_STRING);
$soap_OrderOperationType = new SoapVar('Calc', XSD_STRING);
$soap_OperationType = new SoapVar('Sale', XSD_STRING);
$soap_DateTime = new SoapVar('2022-06-24T15:22:05', XSD_STRING);
$soap_Organization = new SoapVar('test', XSD_STRING);
$soap_BusinessUnit = new SoapVar('test', XSD_STRING);
$soap_POS = new SoapVar('test', XSD_STRING);
$soap_Number = new SoapVar('s001', XSD_STRING);
$soap_Summ = new SoapVar(21100.00, XSD_STRING);
$soap_Discount = new SoapVar(0.000, XSD_STRING);
$soap_SummDiscounted = new SoapVar(21100.00, XSD_STRING);
$soap_PaidByBonus = new SoapVar(0.00, XSD_STRING);
$soap_OrderRequest = new SoapVar(
    [
        'ChequeType' => $soap_ChequeType,
        'RequestID' => $soap_RequestID,
        'OrderOperationType' => $soap_OrderOperationType,
        'OperationType' => $soap_OperationType,
        'DateTime' => $soap_DateTime,
        'Organization' => $soap_Organization,
        'BusinessUnit' => $soap_BusinessUnit,
        'POS' => $soap_POS,
        'Number' => $soap_Number,
        'Summ' => $soap_Summ,
        'Discount' => $soap_Discount,
        'SummDiscounted' => $soap_SummDiscounted,
        'PaidByBonus' => $soap_PaidByBonus,
        'Item' => $soap_Item,
        'Card' => $soap_Card,
    ]
    , SOAP_ENC_ARRAY);

$soap_request = new SoapVar(['OrderRequest' => $soap_OrderRequest, 'orgName' => $soap_orgName], SOAP_ENC_ARRAY);
try {
    // Создание SOAP-клиента
    $options = array(
        'soap_version' => SOAP_1_2,
        'exceptions' => true,
        'login' => 'test',
        'password' => 'test',
    );
    $soapClient = new SoapClient("http://mlweb56.manzanagroup.ru:8534/POSProcessing.asmx?WSDL", $options);
    hdump($soapClient->ProcessRequest(['request' => $soap_request]));

} catch (SoapFault $exception) {
    echo $exception->getMessage();
}
    

Возникли вопросы: ChequeType я верно передаю? Ведь он в XML не так как все выглядит. Как засунуть несколько Item внутрь OrderRequest Как правильно все же сделать запрос, у меня сейчас ошибка: Server was unable to process request. ---> requests.Items

WSDL тут: https://disk.yandex.ru/d/mA2T9FDr2JwYjw


Ответы (0 шт):