Версия документа


НазваниеВерсия документа
страница10/11
ТипДокументы
filling-form.ru > бланк заявлений > Документы
1   2   3   4   5   6   7   8   9   10   11

Запросы для REST-сервиса


Пример всех запросов XML/JSON для основных типовых методов сервиса вы найдете в этом разделе. Основная рекомендация – используйте JSON, с POST запросом в XML слишком много ограничений и условий.

Основные замечания при составлении и отправки JSON-запросов сервису

  1. Запрос должен содержать все свойства объекта в алфавитном порядке (см пример запроса), иначе при десериализации часть значений будет утеряна, за информацией обращайтесь к описанию сервиса по WSDL.



  1. Если вы используете передачу данных в JSON, даты должны передаваться следующим образом

В некоторых случаях при вызове методов формат даты может быть в формате /Date(1449672181000+0300)/. В текущей версии API используется майкрософтовский сериализатор, он так выполняет сериализацию дат https://msdn.microsoft.com/ru-ru/library/bb412170(v=vs.110).aspx   

Это число миллисекунд в часовом поясе GMT по-обычному (не летнему) времени, прошедшее с 1 января 1970 г. Это число может быть отрицательным для представления более раннего времени. Часть строки "+0500" является необязательной и показывает, что это время в формате Local, т. е. при десериализации оно должно быть преобразовано в местный часовой пояс. Если эта часть строки отсутствует, время десериализуется как UTC. Собственно, число (в данном случае "0500") и его знак (+ или -) игнорируются."

На сайте есть функция перевода даты для указанного формата (см. метод CreatePreadvice)

http://test-api.hermes-dpd.ru/rest_main.html

function getMSJSONDate(iso8601Date) {

var date = new Date(iso8601Date);
var utcPart = '';

//utc

if (iso8601Date.length > 23) {

utcPart = iso8601Date.substring(23);

}
var offset = date.getTimezoneOffset() * 60 * 1000;
var withOffset = date.getTime();

var withoutOffset = withOffset - offset;
return "/Date(" + withOffset + utcPart + ")/";

}

В следующей версии API будет использоваться сериализатор Newtonsoft.Json и формат дат ISO 8601

Основные замечания при составлении и отправки XML-запросов сервису

  1. Все имена вызываемых методов должны быть указаны с учетом регистра, как они описаны в WSDL.

  2. Запрос должен содержать все свойства объекта в алфавитном порядке (см пример запроса), иначе при десериализации часть значений будет утеряна, за информацией обращайтесь к описанию сервиса по WSDL

  3. При формировании любого запроса нужно указывать неймспейс xmlns="https://api.hermes-dpd.ru/WS/rest" в качестве атрибута элемента с именем = наименованию вызываемого метода

  4. Дополнительный неймспейс xmlns:i="http://www.w3.org/2001/XMLSchema-instance" необходим для отметки пустых значений, особенно для дат, в элементе нужно добавить атрибут i:nil="true".

  5. Дополнительный неймспейс xmlns:a=" http://schemas.microsoft.com/2003/10/Serialization/Arrays" в качестве атрибута нужен для передачи массива значений в качестве параметра, например,

    1. SendPreadvicesToDelivery - для отправки предзаказов на доставку





1000


10009900000002




    1. DeletePreadvice - удаления предзаказов






10009900000002




  1. Для комплексных объектов, такие как Preadvice, ExtraParam, необходимо указать пустой неймспейс для корректной десериализации xmlns=""

  2. Все условия собраны в ниже приведенном примере





xmlns="">

1000

RUB

1500

111222

1113

23

1312

321

321

1312

MOSCOW

1

RUS

a@a.ru

a

g

1

21321321

321321321

21321321

321321 rr

saras

ra

r2r32r32

молчанова

1000

123456

437





RUB

1000

2014-12-01T14:35:05.000


/>


21321

1321

321

1321

935002






DIRECT_DELIVERY




Запрос на PHP




error_reporting(E_ALL);
try {

$user = "testlogin";

$pass = "testpassword";

$bucode = "1000";





GetParcelShops_Rest($user, $pass, $bucode);

//GetParcelShops_Soap($user, $pass, $bucode);

CreatePreadvice_Rest($user, $pass, $bucode);



}

catch (SoapFault $fault) {

$error = "Fault: (faultcode: {$fault->faultcode}\n" . "faultstring: {$fault->faultstring})";

echo $error;

}

catch (Exception $exception) {

echo "
" . $exception;


}
function GetParcelShops_Rest($user, $pass, $bucode)

{

echo "REST request... (json)

";




//------------------------------------------------------------------

$location = "https://test-api.hermes-dpd.ru/WS/RestService.svc/rest";



$access_token = base64_encode($user.":".$pass);



$method = "/GetParcelShops";

$url = "https://test-api.hermes-dpd.ru/WS/RestService.svc/rest" . $method;

$data = json_encode(array('businessUnitCode' => $bucode));



echo $data;



// set up the request context

$options = array("http" => array(

"method" => "POST",

"header" => array("Authorization: Basic " . $access_token,

"Content-Type: application/json"),

"content" => $data

));

$context = stream_context_create($options);

// make the request

$response = file_get_contents($url, false, $context);

echo "

REST response...

";


echo $response;

}
function CreatePreadvice_Rest($user, $pass, $bucode)

{

echo "REST request... (json)

";




//------------------------------------------------------------------

$location = "https://test-api.hermes-dpd.ru/WS/RestService.svc/rest";



$access_token = base64_encode($user.":".$pass);



$method = "/CreatePreadvice";

$url = "https://test-api.hermes-dpd.ru/WS/RestService.svc/rest" . $method;



//just grab json from http://test-api.hermes-dpd.ru/rest_main.html

//and decode it to obj or use as context in a request

$data =

'{

"preadvices": [

{

"BusinessUnitCode": ' . $bucode . ',

"CashOnDeliveryCurrency": "RUB",

"CashOnDeliveryValue": 100,

"ClientOrderNumber": "TEST_1",

"ClientParcelNumber": "TEST_1",

"CustomStoragePeriod": 0,

"CustomerAdditionalAddressInfo": "test adr info",

"CustomerAdditionalPhoneNumber": "test adr phone",

"CustomerApartmentNumber": "0",

"CustomerBuildingNumber": "13",

"CustomerCity": "MOSCOW",

"CustomerConstructionNumber": "3",

"CustomerCountryCode": "RUS",

"CustomerEmail": "nomail@ya.ru",

"CustomerFarthersName": "Namegiven X",

"CustomerFirstName": "Name X",

"CustomerFrameNumber": "1",

"CustomerLandlinePhoneNumber": "+7 (499) 681-12-52",

"CustomerMobilePhoneNumber": "+7 (499) 681-12-52",

"CustomerNumber": "21321321",

"CustomerRegion": "noregion",

"CustomerStreet": "dokukina",

"CustomerStreetType": "st.",

"CustomerSubregion": "X",

"CustomerSurname": "Surname X",

"CustomerZipCode": "101000",

"DirectDistributionCenterCode": "",

"DispatchDate": null,

"ExtraParams": null,

"InsuranceCurrency": "RUB",

"InsuranceValue": 1000,

"OrderPlacementTimestamp": "/Date(1450794905000)/",

"ParcelBarcode": "",

"ParcelHeight": 10,

"ParcelLength": 10,

"ParcelWeight": 1,

"ParcelWidth": 10,

"ParcelshopCode": "935002",

"ReturnDistributionCenterCode": "",

"Services": ["DIRECT_DELIVERY"]

}

]

}';
//check json

//var_dump(json_decode($data, JSON_UNESCAPED_UNICODE));



echo $data;



// set up the request context

$options = array("http" => array(

"method" => "POST",

"header" => array("Authorization: Basic " . $access_token,

"Content-Type: application/json"),

"content" => $data

));

$context = stream_context_create($options);

// make the request

$response = file_get_contents($url, false, $context);

echo "

REST response...

";


echo $response;

}
function GetParcelShops_Soap($user, $pass, $bucode)

{

echo "

SOAP request...

";




$wsdl = "https://test-api.hermes-dpd.ru/WS/WebService.svc?singleWsdl";

$location = "https://test-api.hermes-dpd.ru/WS/";



$options = array("trace" => 1);
$soap = new SoapClient($wsdl, $options);



//security header

$header_part = "

xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'>



xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'>

".$user."

".$pass."



";

$soap_var_header = new SoapVar($header_part, XSD_ANYXML, null, null, null);

$soap_header = new SoapHeader('https://test-api.hermes-dpd.ru/WS/', 'wsse', $soap_var_header);

$soap->__setSoapHeaders($soap_header);



//available methods

//var_dump($soap->__getFunctions());



// call function defined in soap server

$soap -> GetParcelShops(array("businessUnitCode" => $bucode));



echo "
".htmlspecialchars($soap->__getLastRequest());


echo "

SOAP response...

";


echo "
".htmlspecialchars($soap->__getLastResponse());


}

?>
Убедитесь, что для php включены модули расширения soap и openssl. Запрос можно выполнить на любых онлайн-сервисах, например, на http://phpfiddle.org/
Исходный код доступен по ссылке http://phpfiddle.org/main/code/e8ht-sjbw

1   2   3   4   5   6   7   8   9   10   11

Похожие:

Версия документа iconПрограммно-технический комплекс «Меркурий-150» Версия 3, Версия 31,...
Система менеджмента качества компании-производителя сертифицирована в мировой сертификационной сети iqnet и имеет сертификат ведущего...

Версия документа iconПоложение о служебных командировках работников Челябинского государственного...
Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования «Челябинский...

Версия документа iconI. Формат описания передаваемого документа нбо (Версия 02)
Настоящий документ описывает требования к xml файлам передачи в электронном виде сведений о документе нбо, содержащемся в транспортном...

Версия документа iconМетодика заполнения полей (для библиотек, работающих в аибс, поддерживающих...
Производится полное библиографическое описание каждого документа, представляемого в мэб для размещения в сводном каталоге

Версия документа iconПо «Луч» Версия по 0 Москва, 2013
Настоящее Руководство пользователя лрм сэд нрд (по «Луч») описывает возможности клиентского рабочего места Системы электронного документооборота...

Версия документа iconСовременная Гуманитарная Академия Компьютерное средство обучения...
...

Версия документа iconМаршрут документа «Платежное поручение (пакет платежных поручений)»
«Требования к форматам файлов, используемых при взаимодействии между органами Федерального казначейства и участниками бюджетного...

Версия документа iconАнкета бенефициарного владельца юридического лица
Реквизиты документа, удостоверяющего личность: серия (при наличии) и номер документа, дата выдачи документа, наименование органа,...

Версия документа iconЗаконодательство предусмотрело три вида документа
С начала 2015 года Украина начнет официальный выпуск биометрических паспортов для своих граждан. Основной особенностью документа...

Версия документа iconРуководство Пользователя Редакция 0 2008 Содержание Статус документа 3 Введение 4
Данный документ представляет собой описание Интернет-версии системы Банк+Клиент ielba райффайзенбанка (версия 6). В нем рассматриваются...

Вы можете разместить ссылку на наш сайт:


Все бланки и формы на filling-form.ru




При копировании материала укажите ссылку © 2019
контакты
filling-form.ru

Поиск