взаимодействия в рамках оказания услуг по доставке заказов (отправлений) до
получателей. Под полным циклом взаимодействия подразумевается следующие
функции:
-проверку допустимости габаритновесовых характеристик (ГВХ) отправления;
-расчет стоимости различных способов доставки по заданному адресу
получателя и ГВХ;
-расчет стоимости упаковки и маркировки отправления, а при необходимости
предоставление детализации этих затрат;
-прием и хранение детализированной информации по каждому отправлению
(товарное наполнение, адрес получателя и отправителя, стоимость доставки,
объявленная ценность, вариант упаковки и способ доставки);
-подготовка реестров, актов приёмапередачи товарных вложений;
-предоставление информации по отслеживанию отправлений.
описываемого в настоящем документе вебсервиса потребителю информации
необходимо:
1. Заключить договор с ООО «Апликс» на оказание услуг по доставке заказов (после
заключения договора потребителю будут предоставлены логин и пароль для доступа к
вебсервису).
2. Разработать программный клиент, соответствующий требованиям, изложенным в
настоящем документе;
Для тестирования и отладки необходимо использовать экземпляр сервиса с учетными
данными: http://z.aplix.loc/post/ws/Delivery.1cws?wsdl
Пароль: test
Логин: test
Описание составных типов, используемых в вебсервисе приведено в XMLсхеме ниже
[xml]
[/xml]
Информационное взаимодействие производится по инициативе системыпотребителя информации. Процесс взаимодействия состоит из следующих шагов:
1. Проверка габаритновесовых характеристик товарного вложения. Системапотребитель
вызывает метод вебсервиса CheckDimensions и передает список товаров с указанием
длины, ширины, высоты, веса и количества каждого товара в планируемом
отправлении. В ответ на вызов метода системапотребитель получает ответ:
превышены или нет предельные значения габаритов и веса, попутно для справки метод
возвращает суммарную длину, ширину, высоту и вес отправления после решения
задачи «оптимальной укладки», а также текстовый комментарий результата проверки;
2. Получение возможных вариантов доставки. Системапотребитель вызывает метод
вебсервиса CalculateShippingCost и передает адрес получателя, состав товарного
вложения, тип упаковки и объявленной ценности. В ответ на вызов метода
системапотребитель получает ответ: список возможных вариантов доставки с
указанием стоимости доставки, ориентировочной длительности доставки, а также
справочной информации (режим работы и местонахождение почтового отделения). Для
получения детализации расчета стоимости затрат на подготовку и отправку
отправления метод возвращает уникальный идентификатор запроса, по которому в
дальнейшем можно будет запросить детализацию, используя метод GetDetailsOfCost.
3. Размещение заказа в системе исполнителя. Системапотребитель вызывает метод
вебсервиса PushOrder и передает номер и дату заказа, уникальный идентификатор
заказа, информацию о получателе, включая его адрес и телефон, объявленную
ценность и сумму наложенного платежа, состав товарного вложения, тип упаковки и
выбранный способ доставки. В ответ на вызов метода системапотребитель получает
идентификатор заказа в системе исполнителя.
4. Детализация затрат на упаковку и маркировку отправления. Системапотребитель
вызывает метод вебсервиса GetDetailsOfCost и передает идентификатор расчета,
который был получен при вызове метода CalculateShippingCost, а также идентификатор
метода доставки.
5. Размещение реестра заказов в системе исполнителя. Системапотребитель вызывает
метод вебсервиса PushReestr и передает идентификатор реестра, его номер, дату,
ожидаемую дату передачи заказов исполнителю и собственно список идентификаторов
заказов, которые входят в данные реестр.
6. Получение трекномеров по заказам. Периодически (рекомендуется вызывать метод не
чаще чем 1 раз в час) системапотребитель вызывает метод вебсервиса
GetTrackNumbers и передает дату и время последнего успешного получения списка
трекномеров. В ответ метод GetTrackNumbers возвращает список трекномеров,
которые были привязаны к заказам за промежуток времени с указанной даты по
текущее время.
Синтаксис:
Boolean CheckDimenshions(Dimensions[] DimensionsList,
Out float Length,
Out float Width,
Out float Height,
Out float Weight,
Out string Comment)
Параметры:
Имя параметра | Входной / Выходной | Тип | Описание |
---|---|---|---|
DimensionsList | входной | Dimensions[] | Массив габаритновесовых характеристик товаров |
Length | выходной | float | Длина посылки |
Width | выходной | float | Ширина посылки |
Height | выходной | float | Высота посылки |
Weight | выходной | float | Вес посылки |
Comment | выходной | float | Текстовое описание при превышении предельных значений габаритновесовых характеристик |
Описание:
В метод передается список габаритновесовых характеристик всех товаров
(DimensionsList). После расчета выходные параметры Length, Width, Height (длина,
ширина и высота соответственно) заполняются габаритами посылки, после решения
задачи «оптимальной укладки», а в параметр Weight передается суммарный вес всех
товаров, без учета упаковочных материалов. В том случае если габариты отправления
превышают предельные значения в параметр Comment передается текстовое описание
несоответствия.
Возвращаемое значение: Метод возвращает булево значение True, если
габаритновесовые характеристики не превышают предельных значений и доставка
возможна хотя бы одним доступным способом, иначе False. Предположительно данный
метод может использоваться на стороне клиента для оперативной оценки
принципиальной возможности отправки заказа и своевременного принятия какихлибо
решений, если сделать этого невозможно.
ws.Credentials = new NetworkCredential("test", "test");
// Предположим, что в корзине 2 позиции и необходимо проверить не превышают ли он
ограничения по допустимым габаритам и весу
aplix.Dimensions[] Dimensions = new aplix.Dimensions[2];
aplix.Dimensions Item;
Item = new aplix.Dimensions();
Item.Length = 0.130f;
Item.Width = 0.100f;
Item.Height = 0.001f;
Item.Weight = 0.1f;
Item.Qty = 2;
Dimensions[0] = Item;
Item = new aplix.Dimensions();
Item.Length = 0.1331f;
Item.Width = 0.0998f;
Item.Height = 0.0788f;
Item.Weight = 0.575f;
Item.Qty = 1;
Dimensions[1] = Item;
// Выходные параметры
float Length;
float Width;
float Height;
float Weight;
string Comment;
// Выполнить проверку габаритно‐весовых характеристик
bool Result = ws.CheckDimenshions(Dimensions, out Length, out Width, out Height, outWeight, out Comment);
// Визуализация результата
Response.Write("Result:<b>" + Result.ToString() + "</b>");
Response.Write("Length:<b>" + Length.ToString() + "</b>");
Response.Write("Width:<b>" + Width.ToString() + "</b>");
Response.Write("Height:<b>" + Height.ToString() + "</b>");
Response.Write("Weight:<b>" + Weight.ToString() + "</b>");
Response.Write("Weight:<b>" + Comment + "</b>");
[/php]
Long CalculateShippingCost(string OrderNumber,
Float DeclaredCost,
Goods[] Goods,
Address Address,
Byte TypeOfSeal,
Boolean SturdyPackaging,
Boolean CashOnDelivery,
Out DeliveryType[] Types,
Out string Comments)Параметры:
Имя параметра | Входной / Выходной | Тип | Описание |
---|---|---|---|
OrderNumber | входной | string | Номер заказа, если известен в системе потребителя. Если будет задан, то расчет в будущем будет привязан к заказу. |
DeclaredCost | входной | Float | Объявленная ценность отправления. На указанную сумму будет оформленная страховка. |
Goods | входной | Goods[] | Список товаров массив структур (Артикул, Наименование, Длина, Ширина, Высота, Вес, Количество) |
Address | входной | Address | Адрес получателя (структура: Почтовый индекс, Регион, Район, Город, Населенный пункт, Улица, Дом, Корпус, Картира) |
TypeOfSeal | входной | Byte | Вариант уплотнения, возможные значения:1 Не требуется 2 Пузырчатая пленка 3 Наполнитель |
SturdyPackagin
g |
входной | Boolean | Обязательно ли требуется жесткая упаковка |
CashOnDelivery | входной | Boolean | Требуется ли наложенный платеж |
Types | выходной | DeliveryType[] | Список доступных вариантов доставки |
Comments | выходной | DeliveryType[] | Список доступных вариантов доставки |
Описание:
Метод по заданным параметрам выдает список доступных вариантов доставки
(выходной параметр Types) в виде массива структур <Идентификатор способа доставки, Наименование способа доставки, Себестоимость доставки, Страховую премию, Затраты на упаковку и маркировку, Адрес нахождения почтового отделения, либо точки самовывоза, Режим работы почтового отделения, либо точки самовывоза, Минимальное количество дней доставки, Максимальное количество дней доставки, Доп.информация>. Если в процессе расчета возникли какиелибо исключения, то
описание ошибки будет возвращено в параметр Comments.
Возвращаемое значение:
Метод возвращает уникальный идентификатор расчета, по которому в дальнейшем
можно будет запросить детализацию материальных и трудовых затрат, используя метод
GetDetailsOfCost.
aplix.Delivery ws = new aplix.Delivery();
ws.Credentials = new NetworkCredential("test", "test");
// 684005, Камчатский край, Елизовский р‐н, Елизово г, Ленинская ул, дом No 16
aplix.Address Address = new aplix.Address();
Address.Index = "684005";
Address.Region = "Камчатский край";
Address.District = "Елизовский р‐н";
Address.City = "Елизово г";
Address.Street = "Ленинская ул";
Address.Home = "16";
// Предположим, что заказ состоит из 2 позиций
aplix.Goods[] Goods = new aplix.Goods[2];
aplix.Goods Item;
Item = new aplix.Goods();
Item.SKU = "216293";
Item.Name = "карта памяти SDXC 64Gb Class 10 Transcend";
Item.Length = 0.130f;
Item.Width = 0.100f;
Item.Height = 0.001f;
Item.Weight = 0.1f;
Item.Qty = 2;
Goods[0] = Item;
Item = new aplix.Goods();
Item.SKU = "499687";
Item.Name = "зеркальный фотоаппарат Canon EOS 650D Kit Tamron AF 18‐270mm Black";
Item.Length = 0.1331f;
Item.Width = 0.0998f;
Item.Height = 0.0788f;
Item.Weight = 0.575f;
Item.Qty = 1;
Goods[1] = Item;
//Заполним параметры для калькулятора
string OrderNumber="1234567890";
float DeclaredCost = 36370;
sbyte TypeOfSeal = 1;
bool SturdyPackaging = true;
bool CashOnDelivery = false;
aplix.DeliveryType[] Types; string Comments;
//Вызов калькулятора
long Status = ws.CalculateShippingCost(OrderNumber, DeclaredCost, Goods, Address,TypeOfSeal, SturdyPackaging,CashOnDelivery, out Types, out Comments);
//Визуализация результата
Response.Write("Id расчета:<b>"+Status.ToString()+"</b>
");
Response.Write("Доп.информация по расчету:<b>" + Comments + "</b>
");
Response.Write(@"</pre>
");
foreach (aplix.DeliveryType type in Types) {
Response.Write(""+ " "+ " "+ " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " "); }
Response.Write("
<table border="1">
<tbody>
<tr>
<th>TypeId</th>
<th>TypeName</th>
<th>TypeDescription</th>
<th>Cost</th>
<th>Insurance</th>
<th>PostalRate</th>
<th>PreparingCost</th>
<th>Address</th>
<th>Worktime</th>
<th>MinPeriod</th>
<th>MaxPeriod</th>
<th>AdditionalInformation</th>
</tr>
<tr>
<td>" + type.TypeId.ToString() + "</td>
<td>" + type.TypeName + "</td>
<td>" + type.TypeDescription + "</td>
<td>" + type.Cost.ToString() + "</td>
<td>" + type.Insurance.ToString() + "</td>
<td>" + type.PostalRate.ToString() + "</td>
<td>" + type.PreparingCost.ToString() + "</td>
<td>" + type.Address + "</td>
<td>" + type.Worktime + "</td>
<td>" + type.MinPeriod.ToString() + "</td>
<td>" + type.MaxPeriod.ToString() + "</td>
<td>" + type.AdditionalInformation + "</td>
</tr>
</tbody>
</table>
<pre>");
}
[/php]
Long PushOrder(
ID,
Number,
Date,
Customer,
DeclaredCost,
AmountToBePaid,
DeliveryTypeId,
TypeOfSeal,
SturdyPackaging,
Activity,
Goods,
DeliveryDate,
StartTimeDelivery,
EndTimeDelivery,
Сomment,
ShipperId,
Marker)
Параметры:
Имя параметра | Входной / Выходной | Тип | Описание |
---|---|---|---|
ID | входной | String |
Идентификатор заказа в системе потребителя (уникальное значение) |
Number | входной | String |
Номер заказа в системе потребителя (будет распечатываться в комментариях при маркировке отправлений) |
Date | входной | DateTime |
Дата заказа в системе потребителя (будет распечатываться в комментариях при маркировке отправлений |
Customer | входной | Customer |
Информация о покупателя, струкутра <ФИО, адрес, адрес электронной почты и телефон> |
DeclaredCost | входной | Float |
Объявленная ценность отправления. На указанную сумму будет оформленная страховка. |
AmountToBeP aid |
входной | Float |
Сумма к оплате. Если заказ предоплаченю то 0. |
DeliveryTypeId | входной | Int |
Идентификатор выбранного способа доставки. |
TypeOfSeal | входной | Int |
Вариант уплотнения, возможные значения: 1Не требуется 2Пузырчатая пленка 3Наполнитель |
SturdyPackaging | входной | Boolean |
Обязательно ли требуется жесткая упаковка |
Activity | входной | Boolean |
Актуальность заказа. True – если заказ актуален, False – если заказ отменен. |
Goods | входной | Goods[] | Список товаров |
DeliveryDate | входной | DateTime |
Дата доставки, заполняется если выбрана курьерская доставка |
StartTimeDeliv ery |
входной | Int |
Желаемое время доставки «С», заполняется если выбрана курьерская доставка |
EndTimeDelivery | входной | Int |
Желаемое время доставки «До», заполняется если выбрана курьерская доставка |
Сomment | входной | String | Комментарий к заказу |
ShipperId | входной | String |
Идентификатор отправителя, заполняется если у контрагента несколько интернет магазинов |
Marker | входной | String |
Маркер заказа, заполняется если отправления маркируются метками APLIX.RU |
Описание:
Метод размещает информацию о заказе в системе исполнителя. Системапотребитель
передает номер и дату заказа, уникальный идентификатор заказа, информацию о
получателе, включая его адрес и телефон, объявленную ценность, сумму наложенного
платежа если таковая есть, состав товарного вложения, тип упаковки и выбранный
способ и детали доставки.
Возвращаемое значение:
Метод возвращает уникальный идентификатор заказа в системе исполнителя.
aplix.Delivery ws = new aplix.Delivery();
ws.Credentials = new NetworkCredential("test", "test");
// Подготовим струкутру "Получатель отправления"
aplix.Customer Customer = new aplix.Customer();
// 684005, Камчатский край, Елизовский р‐н, Елизово г, Ленинская ул, дом No 16
aplix.Address Address = new aplix.Address();
Address.Index = "684005";
Address.Region = "Камчатский край";
Address.District = "Елизовский р‐н";
Address.City = "Елизово г";
Address.Street = "Ленинская ул";
Address.Home = "16";
Customer.Address = Address;
Customer.ID = "psv@vardex.ru";
Customer.Name = "Сергей";
Customer.Email = "psv@vardex.ru";
Customer.Phone = "+7(916)975‐53‐54";
//Заполним параметры заказа
string ID = "2013‐1234567890"; // Уникальный идентификатор заказа в системе клиента
string Number = "1234567890"; // Номер заказа в системе клиента
DateTime Date = new DateTime(2013, 08, 30);
float DeclaredCost = 36350.0f; // Объявленная ценность
float AmountToBePaid = 0; // Нет наложенного платежа
int DeliveryTypeId = 4; // ЕМС
sbyte TypeOfSeal = 2; // Пузырчатая пленка
bool SturdyPackaging = true; // Жесткая упаковка (для хрупких вещей)
bool Activity = true; // Документ актуален
// Предположим, что заказ состоит из 2 позиций
aplix.Goods[] Goods = new aplix.Goods[2];
aplix.Goods Item;
Item = new aplix.Goods();
Item.SKU = "216293";
Item.Name = "карта памяти SDXC 64Gb Class 10 Transcend";
Item.Length = 0.130f;
Item.Width = 0.100f;
Item.Height = 0.001f;
Item.Weight = 0.1f;
Item.Qty = 1;
Item.Price = 2080.0f;
Item.VATRate = "НДС18";
Goods[0] = Item;
Item = new aplix.Goods();
Item.SKU = "499687";
Item.Name = "зеркальный фотоаппарат Canon EOS 650D Kit Tamron AF 18‐270mm Black";
Item.Length = 0.1331f;
Item.Width = 0.0998f;
Item.Height = 0.0788f;
Item.Weight = 0.575f;
Item.Qty = 1;
Item.Price = 34270.0f;
Item.VATRate = "НДС18";
Goods[1] = Item;
DateTime DeliveryDate = new DateTime(2013, 09, 05); //Доставка на 05 09 2013 года
int StartTimeDelivery = 10; // интервал доставки с 10
int EndTimeDelivery = 14; // до 14
string Comment = "Тестовый заказ";
//Впулить заказ в систему
long OrderId = ws.PushOrder(ID, Number, Date, Customer, DeclaredCost, AmountToBePaid,DeliveryTypeId, TypeOfSeal, SturdyPackaging, Activity, Goods, DeliveryDate, StartTimeDelivery,EndTimeDelivery, Comment, "", "");
Response.Write("Id заказа:<b>" + OrderId.ToString() + "</b>
");
[/php]
Входной / Выходной
Тип
Описание
входной
Long
Идентификатор расчета (уникальное значение), полученный при вызове метода CalculateShippingCost
входной
Int
Идентификатор варианта доставки, по которому необходимо получить детализацию
Имя параметра | |
---|---|
ID | TypeId |
Описание: Метод возвращает детализированный список затрат на маркировку и упаковку отправления по заданным идентификатору расчета и идентификатору варианта доставки. Возвращаемое значение: Метод возвращает массив структур
[xml]
[/xml]
Каждый элемент массива содержит описание затраты, количество, цену и стоимость.
aplix.Delivery ws = new aplix.Delivery();
ws.Credentials = new NetworkCredential("test", "test");
long ID = 168; // Идентификатор расчета, полученный методом CalculateShippingCost
int TypeId = 3; // Почтовая доставка
// Получим детализацию расчета
aplix.DetailsOfCost[] Details = ws.GetDetailsOfCost(ID, TypeId);
//Визуализация результата
Response.Write("Id расчета:<b>" + ID.ToString() + "</b>
");
Response.Write("Id метода доставки:<b>" + TypeId.ToString() + "</b>
");
Response.Write(@"</pre>
");
foreach (aplix.DetailsOfCost DetailOfCost in Details)
{
Response.Write("" + " " + " " + " " + " " + " ");
}
Response.Write("
<table border="1">
<tbody>
<tr>
<th>Description</th>
<th>Price</th>
<th>Qty</th>
<th>Cost</th>
</tr>
<tr>
<td>" + DetailOfCost.Description + "</td>
<td>" + DetailOfCost.Price.ToString() + "</td>
<td>" + DetailOfCost.Qty.ToString() + "</td>
<td>" + DetailOfCost.Cost.ToString() + "</td>
</tr>
</tbody>
</table>
<pre>");
[/php]
Входной / Выходной
Тип
Описание
входной
String
Идентификатор реестра в системе потребителя (уникальное значение)
входной
String
Идентификатор варианта доставки, по которому необходимо получить детализацию
входной
DateTime
Дата реестра (будет распечатываться в актах приемапередачи отправлений)
входной
DateTime
Ожидаемая дата передачи отправлений исполнителю
входной
String[]
Массив идентификаторов заказов, которые включаются в данный реестр
Имя параметра | ||||
---|---|---|---|---|
ID | Number | Date | DateOfShipment | IDs |
Описание: Метод размещает информацию о реестре в системе исполнителя. Системапотребитель передает номер и дату реестра, уникальный идентификатор реестра, ожидаемую дату передачи отправлений исполнителю. Возвращаемое значение: Метод возвращает уникальный идентификатор реестра в системе исполнителя.
aplix.Delivery ws = new aplix.Delivery();
ws.Credentials = new NetworkCredential("test", "test");
// Список идентификаторов заказов, которые входят в данный реестр
string[] IDs={"2013‐1234567890", "2013‐1234567891"};
// Уникальный идентификатор реестра в системе клиента
string ID = "2013‐r12345";
// Номер реестра в системе клиента
string Number = "r12345";
// Дата формирования реестра в системе клиента
DateTime Date = new DateTime(2013, 10, 22);
// Предполагаемая дата передачи заказов на доставку
DateTime DateOfShipment = new DateTime(2013, 10, 23);
// Получим детализацию расчета
long ReestID = ws.PushReestr(ID, Number, Date, DateOfShipment, IDs);
//Визуализация результата
Response.Write("Id реестра:<b>" + ReestID.ToString() + "</b>
");
[/php]
Входной / Выходной
Тип
Описание
входной
DateTime
Дата последнего успешного получения трекномеров. Параметр используется для того чтобы сократить объем передаваемых данных и не дублировать данные, которые были выгружены ранее.
входной
TrackNumber[]
Массив трекномеров по заказам
Имя параметра | |
---|---|
DateOfLastGetting | TrackNumbers |
Описание: Метод возвращает список трекномеров, которые были привязаны к заказам за период с DateOfLastGetting по текущее время. Результата помещается в выходной параметр TrackNumbers. Свойство Activity имеет значение true, если трекномер актуален, иначе ложь. Возможны ситуации, когда отправлению присваивается один трекномер, а по истечении некоторого второй трек номер, в этом случае трекномер, присвоенный изначально становиться не актуальным. Возвращаемое значение: Метод возвращает дату и время на которое актуальны выгружаемые данные. Данное значение необходимо использовать при следующем вызове метода GetTrackNumbers в параметре DateOfLastGetting.
aplix.Delivery ws = new aplix.Delivery();
ws.Credentials = new NetworkCredential("test", "test");
// Дата последнего удачного получения треков
DateTime DateOfLastGetting = new DateTime(2013, 08, 01);
aplix.TrackNumber[] TrackNumbers;
// Получим список трек‐номеров
DateTime NewDateOfLastGetting = ws.GetTrackNumbers(DateOfLastGetting, out TrackNumbers);
//Визуализация результата
Response.Write("NewDateOfLastGetting: <b>" + NewDateOfLastGetting.ToString() +"</b>
");
Response.Write(@"</pre>
");
foreach (aplix.TrackNumber TrackNumber in TrackNumbers)
{
Response.Write("" + " " + " " + " " + " ");
}
Response.Write("
<table border="1">
<tbody>
<tr>
<th>OrderID</th>
<th>TrackNumber</th>
<th>Activity</th>
</tr>
<tr>
<td>" + TrackNumber.OrderID.ToString() + "</td>
<td>" + TrackNumber.Number + "</td>
<td>" + TrackNumber.Activity+ "</td>
</tr>
</tbody>
</table>
<pre>");
[/php]