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

Тема в разделе "PHP", создана пользователем Jarhead, 26 мар 2018.

Модераторы: latteo
  1. Jarhead

    Jarhead

    Регистр.:
    17 июн 2011
    Сообщения:
    396
    Симпатии:
    142
    Бьюсь с проблемой не могу понять что не так, прошу помощи:

    Есть вот документация: http://api-wiki.ponyexpress.ru/index.php/Заглавная_страница

    Есть WDSL: https://svc-api.p2e.ru/UI_Service.svc?singleWsdl

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


    <?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>

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

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

    $client->__soapCall('SubmitRequest', array($parameter));
     
  2. borodatych

    borodatych Постоялец

    Регистр.:
    24 июн 2016
    Сообщения:
    117
    Симпатии:
    68
    Попробуйте через:
    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" => ) );
    $response $client->SubmitRequest$params );
     
  3. Jarhead

    Jarhead

    Регистр.:
    17 июн 2011
    Сообщения:
    396
    Симпатии:
    142
    1.2 не поддерживается, попробовал, не работает так
     
  4. borodatych

    borodatych Постоялец

    Регистр.:
    24 июн 2016
    Сообщения:
    117
    Симпатии:
    68
    В 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";
    }
     
  5. Jarhead

    Jarhead

    Регистр.:
    17 июн 2011
    Сообщения:
    396
    Симпатии:
    142
    Ошибок нет
     
  6. borodatych

    borodatych Постоялец

    Регистр.:
    24 июн 2016
    Сообщения:
    117
    Симпатии:
    68
    Это то что возвращается в секции try?

    Выложите куда-нибудь код, к примеру сюда
     
  7. Jarhead

    Jarhead

    Регистр.:
    17 июн 2011
    Сообщения:
    396
    Симпатии:
    142
    Это возвращает $client->__getLastResponse();
     
  8. Jarhead

    Jarhead

    Регистр.:
    17 июн 2011
    Сообщения:
    396
    Симпатии:
    142
    Код я же писал:

    Код:
    $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
                    )
    
            )
    
    )
    
    
     
  9. Jarhead

    Jarhead

    Регистр.:
    17 июн 2011
    Сообщения:
    396
    Симпатии:
    142
    Вообщем разобрался, ответ оказался в примере для 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);