SOAP интеграция с API Pony Express

Jarhead

Постоялец
Регистрация
17 Июн 2011
Сообщения
414
Реакции
169
Бьюсь с проблемой не могу понять что не так, прошу помощи:

Есть вот документация: Для просмотра ссылки Войди или Зарегистрируйся

Есть WDSL: Для просмотра ссылки Войди или Зарегистрируйся

Отправляю вот эти данные:


<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:xsi="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:ns1="Для просмотра ссылки Войди или Зарегистрируйся">
<SOAP-ENV:Body>
<ns1:SubmitRequest>
<accesskey>......</accesskey>
<requestBody>
<Request xsi:type="OrderRequest">
<Id>10174</Id>
<Mode>Status</Mode>
<OrderList>
<Order>
<ServiceList>
<Service xsi:type="DeliveryService">
<Waybill>
<Number>22-6762-0542</Number>
</Waybill>
</Service>
</ServiceList>
</Order>
</OrderList>
</Request>
</requestBody>
</ns1:SubmitRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Выдает ошибку что то типа A system error has been occurred. Please contact service desk.

Отправляю данные вот так:

$client->__soapCall('SubmitRequest', array($parameter));
 
Попробуйте через:
PHP:
$params = [
    'Id'=>10174,
    '....',
    'Number'=>'22-6762-0542',
];
$client = new SoapClient( 'https://svc-api.p2e.ru/UI_Service.svc?singleWsdl', array( 'soap_version' => SOAP_1_2, 'encoding' => 'UTF-8', "trace" => 1, "exception" => 1 ) );
$response = $client->SubmitRequest( $params );
 
1.2 не поддерживается, попробовал, не работает так
 
В try-catch заверните и гляньте, что там:
PHP:
try
{
    $client->__soapCall('SubmitRequest', array($parameter));
}
catch( Exception $e )
{
    echo "\n" . print_r(array("ERROR: ".date('Y.m.d H:i:s'),$e,$client->__getLastResponse(),$client->__getLastRequest())) . "\n";
}
 
В try-catch заверните и гляньте, что там:
PHP:
try
{
    $client->__soapCall('SubmitRequest', array($parameter));
}
catch( Exception $e )
{
    echo "\n" . print_r(array("ERROR: ".date('Y.m.d H:i:s'),$e,$client->__getLastResponse(),$client->__getLastRequest())) . "\n";
}

Ошибок нет
 
Это возвращает $client->__getLastResponse();

Код я же писал:

Код:
$session = $client->__soapCall('SubmitRequest', array($parameter));


В $client->__getLastRequest() у меня идет такой запрос:

Код:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://tempuri.org/">
    <SOAP-ENV:Body>
        <ns1:SubmitRequest>
            <accesskey>********</accesskey>
            <requestBody>
                <Request xsi:type="OrderRequest">
                    <Id>10174</Id>
                    <Mode>Status</Mode>
                    <OrderList>
                        <Order>
                            <ServiceList>
                                <Service xsi:type="DeliveryService">
                                    <Waybill>
                                        <Number>22-6762-0542</Number>
                                    </Waybill>
                                </Service>
                            </ServiceList>
                        </Order>
                    </OrderList>
                </Request>
            </requestBody>
        </ns1:SubmitRequest>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

В $parameter передается следующие:


Код:
SoapVar Object
(
    [enc_type] => 301
    [enc_value] => Array
        (
            [0] => SoapVar Object
                (
                    [enc_type] => 101
                    [enc_value] => ******************
                    [enc_name] => accesskey
                )

            [1] => SoapVar Object
                (
                    [enc_type] => 301
                    [enc_value] => Pony Object
                        (
                            [Request] => SoapVar Object
                                (
                                    [enc_type] => 301
                                    [enc_value] => stdClass Object
                                        (
                                            [Id] => SoapVar Object
                                                (
                                                    [enc_type] => 101
                                                    [enc_value] => 10174
                                                    [enc_name] => Id
                                                )

                                            [Mode] => SoapVar Object
                                                (
                                                    [enc_type] => 101
                                                    [enc_value] => Status
                                                    [enc_name] => Mode
                                                )

                                            [OrderList] => stdClass Object
                                                (
                                                    [Order] => stdClass Object
                                                        (
                                                            [ServiceList] => stdClass Object
                                                                (
                                                                    [Service] => SoapVar Object
                                                                        (
                                                                            [enc_type] => 301
                                                                            [enc_value] => stdClass Object
                                                                                (
                                                                                    [Waybill] => stdClass Object
                                                                                        (
                                                                                            [Number] => 22-6762-0542
                                                                                        )

                                                                                )

                                                                            [enc_stype] => DeliveryService
                                                                        )

                                                                )

                                                        )

                                                )

                                        )

                                    [enc_stype] => OrderRequest
                                )

                        )

                    [enc_name] => requestBody
                )

        )

)
 
Вообщем разобрался, ответ оказался в примере для PHP на последней странице в английской документации к API....

Это кусок моего кода, работающий как надо

PHP:
        $url = 'https://svc-api.p2e.ru/UI_Service.svc?singleWsdl'; // Путь к WSDL файду

        $params = array(
            'cache_wsdl' => 0,
            'exception' => 0,
            'trace' => 1,
        );

        $client = new SoapClient($url, $params);

        $xml = '<?xml version="1.0" encoding="utf-8"?>'
            . '<Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="OrderRequest">'
            . '<Mode>Status</Mode>'
            . '<OrderList>'
            . '<Order>'
            . '<ServiceList>'
            . '<Service xsi:type="DeliveryService">'
            . '<Waybill>'
            . '<Number>ТРЕК НОМЕР</Number>'
            . '</Waybill>'
            . '</Service>'
            . '</ServiceList>'
            . '</Order>'
            . '</OrderList>'
            . '</Request>';

        $chk_query = new StdClass();
        $chk_query->accesskey = 'КЛЮЧ К API';
        $chk_query->requestBody = $xml;
        $result = $client->SubmitRequest($chk_query);
 
Назад
Сверху