php запрос soap

242
04 ноября 2017, 15:33

Здравствуйте!

Сломал уже мозг...

Для запроса расчёта стоимости одной из служб доставки используется SOAP

Делаю с помощью класса SoapClient

$SoapClient = new SoapClient(
    'http://lk-test.cse.ru/1c/ws/web1c.1cws?wsdl',
    array(
        'trace' => 1,
        'version' => 'SOAP_1_2'
    )
);
$response = $SoapClient->Calc($calcParams);

Там есть метод Calc, в который нужно передать параметры запроса (если я правильно понял) Сломал голову как оформить массив параметров $calcParams Там куча повторяющихся ключей Fields... не пойму логики

Отправить нужно вот такой запрос:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Header/>
    <soap:Body>
        <m:Calc xmlns:m="http://www.cargo3.ru">
            <m:login>*****</m:login>
            <m:password>*****</m:password>
            <m:data>
                <m:Key>Destinations</m:Key>
                <m:List>
                    <m:Key>Destination</m:Key>
                    <m:Fields>
                        <m:Key>SenderGeography</m:Key>
                        <m:Value>cf862f56-442d-11dc-9497-0015170f8c09</m:Value>
                        <m:ValueType>string</m:ValueType>
                    </m:Fields>
                    <m:Fields>
                        <m:Key>RecipientGeography</m:Key>
                        <m:Value>cf862f56-442d-11dc-9497-0015170f8c09</m:Value>
                        <m:ValueType>string</m:ValueType>
                    </m:Fields>
                    <m:Fields>
                        <m:Key>TypeOfCargo</m:Key>
                        <m:Value>4aab1fc6-fc2b-473a-8728-58bcd4ff79ba</m:Value>
                        <m:ValueType>string</m:ValueType>
                    </m:Fields>
                    <m:Fields>
                        <m:Key>Weight</m:Key>
                        <m:Value>1</m:Value>
                        <m:ValueType>float</m:ValueType>
                    </m:Fields>
                    <m:Fields>
                        <m:Key>VolumeWeight</m:Key>
                        <m:Value>1</m:Value>
                        <m:ValueType>float</m:ValueType>
                    </m:Fields>
                    <m:Fields>
                        <m:Key>Volume</m:Key>
                        <m:Value>1</m:Value>
                        <m:ValueType>float</m:ValueType>
                    </m:Fields>
                    <m:Fields>
                        <m:Key>Qty</m:Key>
                        <m:Value>1</m:Value>
                        <m:ValueType>int</m:ValueType>
                    </m:Fields>
                </m:List>
            </m:data>
            <m:parameters xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <m:Key>Parameters</m:Key>
                <m:List>
                    <m:Key>ipaddress</m:Key>
                    <m:Value xsi:type="xs:string">10.0.0.1</m:Value>
                    <m:ValueType>string</m:ValueType>
                </m:List>
            </m:parameters>
        </m:Calc>
    </soap:Body>
</soap:Envelope>
Answer 1

Решил так:

$params = new stdClass();
$params->login = '*****';
$params->password = '*****';
$params->data->Key = 'Destinations';
$params->data->List->Key = 'Destination';
$params->data->List->Fields[0]->Key = 'SenderGeography';
$params->data->List->Fields[0]->Value = 'cf862f77-442d-11dc-9497-0015170f8c09';
$params->data->List->Fields[0]->ValueType = 'string';
$params->data->List->Fields[1]->Key = 'RecipientGeography';
$params->data->List->Fields[1]->Value = 'dc5eacd6-442c-11dc-9497-0015170f8c09';
$params->data->List->Fields[1]->ValueType = 'string';
$params->data->List->Fields[2]->Key = 'TypeOfCargo';
$params->data->List->Fields[2]->Value = '4aab1fc6-fc2b-473a-8728-58bcd4ff79ba';
$params->data->List->Fields[2]->ValueType = 'string';
$params->data->List->Fields[3]->Key = 'Weight';
$params->data->List->Fields[3]->Value = 1;
$params->data->List->Fields[3]->ValueType = 'float';
$params->data->List->Fields[4]->Key = 'VolumeWeight';
$params->data->List->Fields[4]->Value = 1;
$params->data->List->Fields[4]->ValueType = 'float';
$params->data->List->Fields[5]->Key = 'Volume';
$params->data->List->Fields[5]->Value = 1;
$params->data->List->Fields[5]->ValueType = 'float';
$params->data->List->Fields[6]->Key = 'Qty';
$params->data->List->Fields[6]->Value = 1;
$params->data->List->Fields[6]->ValueType = 'int';

 $SoapClient = new SoapClient(
    'http://lk-test.cse.ru/1c/ws/web1c.1cws?wsdl',
    array(
        'trace' => 1,
        'version' => 'SOAP_1_2'
    )
);
try {
    $response = $SoapClient->Calc($params);
} catch (Exception $ex){
    echo $ex;
}
READ ALSO
Use of undefined constant php

Use of undefined constant php

Делаю самую простую валидацию e-mail:

186
Почему сервер выдает not found из-за буквы х

Почему сервер выдает not found из-за буквы х

ЗдравствуйтеЕсть правило в

227
Как из строки с помощью regEx получить только цифры

Как из строки с помощью regEx получить только цифры

Есть строка: +х(ххх)ххх-хх-хх - те

171
Вызов функции класса

Вызов функции класса

Как сделать загрузку функций более простой и быстрой? Необходим такой результат:

189