Описание структуры данных — различия между версиями

Материал из Меасофт
Перейти к: навигация, поиск
(Запрос настроек)
(Установка статусов)
Строка 625: Строка 625:
 
         <parentGivenCode>32433</parentGivenCode>
 
         <parentGivenCode>32433</parentGivenCode>
 
         <SendTo>79161234567</SendTo>
 
         <SendTo>79161234567</SendTo>
 +
        <pin>1234</pin>
 
         <items>
 
         <items>
 
               <item code="482228" quantity="1" governmentCode="010290000033411121svKJcBObwXb:K91002A92/kl4UYKTLljwev0qPGRNh8XVpxN8vZrWQuMpHBsesgYvzMqS9PiLWVf3hSVHNfVxohQ2fud5RcUOschSdu+koA==" />
 
               <item code="482228" quantity="1" governmentCode="010290000033411121svKJcBObwXb:K91002A92/kl4UYKTLljwev0qPGRNh8XVpxN8vZrWQuMpHBsesgYvzMqS9PiLWVf3hSVHNfVxohQ2fud5RcUOschSdu+koA==" />

Версия 05:45, 15 апреля 2021

Данная статья предназначена для описания способов хранения данных. Она будет содержать неочевидную справочную информацию.


Содержание

Таблица AlreadyScaned

Таблица очень универсальная, содержит связку штрих-кодов со всевозможными сущностями. В последней версии добавлены 3 поля - RecType, SourceTable и SourceCode. В будущем основными полями таблицы должны стать эти 3 поля и, собственно strbarcode, для которого эта таблица и создавалась.

Поле RecType указывает на тип хранящегося штрих-кода. SourceTable указывает номер таблицы, на которую ссылается SourceCode. RLUser - изменивший пользователь (используется, к сожалению, редко).

Поле SourceCode ссылается на запись таблицы, определенной SourceTable.

Описание возможных значений RecType:

0 - не определено

1 - Принятые на склад штрих-коды (через окно "Прием", Form113), для исключения повторного приема. SourceCode ссылается на address

2 - Отсканированные штрих-коды в акт передачи корреспонденции, для исключения повторного сканирования. SourceCode ссылается на address

3 - Отсканированные штрих-коды в инвентаризацию, для исключения повторного сканирования. SourceCode ссылается на address, ExtraCode1 - код инвентаризации (SendMoneyAct)

4 - Принятые на склад штрих-коды (через окно "Прием", Form113), для исключения повторного приема. SourceCode ссылается на manifestaddress.code, ExtraCode1 - код принятого места (Package)

5 - Отсканированные штрих-коды в (окно Доска приема (DashBoard)), для исключения повторного приема. SourceCode ссылается на addrinventory.code

6 - Серийные номера к складсой операции (ledgerentry).

7 - Разобранные серийные номера (ledgerentry).

8 - Штрих-коды мест, выданных курьеру в выдаче. SourceCode ссылается на givn.code

9 - Штрих-коды комплектации в отправлений в манифест. SourceCode ссылается на shippingplaceaddress.code. SourceTable = 55

Таблица AddressLink

Хранит связи адреса с другими таблицами и записями.

SourceTable, sourceCode - запись к которой привязан адрес. RecType - Позволяет определить тип связи более точно.

SourceTable SourceCode RecType Описание
6 manifest.code 0 Корр. на доставку манифеста
6 manifest.code 1 Корр. на забор манифеста
12 sendmoneyact.code 0 Корр. на доставку АПД
4 schet.code 0 Корр. на доставку счета
3 address.code 0 Корреспонденция была привязана к другой корреспонденции (введена на основании)
3 address.code 1 Корреспонденция на основании которой создана текущая копия, для повторного выполнения
3 address.code 2 Заборная корреспонденция по которой забрали текущий адрес
41 tickets.code 0 Тикеты связанные с корреспонденцией

Таблица trace

Поле ExtraCode1 ссылается на коды сущностей-основания статусов в зависимости от статуса:

State Название статуса ExtraCode1 ссылается на:
2 PICKUP givn.code записи выдачи заказа на забор
3, 21 ACCEPTED, PICKUPREADY manifestaddress.code
4 INVENTORY addrinventory.code
5 DEPARTURING manifestaddress.code
6 DEPARTURE manifest.code
7, 8, 11, 23, 24 DELIVERY, COURIERDELIVERED, COMPLETE, COURIERPARTIALLY, COURIERCANCELED givn.code
13, 14 RETURNING, RETURNED sendmoneyact.code

Формат штрих-кодов

Система формирует штрих-коды EAN13 следующего вида:

2100000018215

где:

1-я цифра всегда "2"

Далее следует код типа штрих-кода (от 1 до 3 цифр)

Далее, до 12-го знака включительно - код сущности, зависит от типа штрих-кода.

13-я цифра - контрольная сумма.



Коды типов штрих-кодов:

1 - Удостоверение курьера kurier (Кандидат на перенос в какой-то другой более узкий диапазон)

2 - элемент простой ведомости items

3 - Заголовок ведомости stran (Кандидат на перенос в какой-то другой более узкий диапазон)

4 - Места корреспонденции packages

5 - наклейка на коробку address (первые 2 знака содержат номер коробки) (Более не используется)

6 - наклейка address

7 - расширенная ведомость address

80 - Свободен

81 - Товар item

82 - Чек trans

83 - Документ docs

84 - кассовый аппарат -

85 - документ возврата -

86 - "сборка сборок" (т.е. комплект корреспонденции) Одноразовая этикетка - - Устаревшее, вместо них теперь 876

870 - Свободен

871 - Ячейка для адресного хранения корреспонденции на складе - Устаревшее, вместо них теперь 876

872 - Команда (Более не используется), команды переехали в states (ШК 88 cо statetype 67)

873 - отчет о доставке SendMoneyAct

874 - POS-терминал

875 - Автомобиль (комплект документов и ключи для выдачи через систему)

876 - Ячейка для комплектации вложений (shelving.code). Следующий 1 знак - код типа ячейки по states statetype=71. Значение 0 - одноразовые наклейки для сборки комплектов

877 - Cчет (schet.code)

878 - Наклейка для маркировки мест (тикет 5770)

879 - Манифест (manifest.code)

88 - Справочник states. 1-е 4 знака - statetype, еще 5 знаков - statecode

8900 - Мешок манифеста shippingplace.code (Тип открывает диапазон от 8900 до 8999, максимальный код записи - 9 999 999)

8901 - Новое удостоверение курьера.

Таблица docdetail

Таблица может использоваться для добавления дополнительных полей к таблицам (аналог пользовательских полей, только системные).

sourceTable - код таблицы schema.table_list, по умолчанию это таблица Doc

DocId - ссылка на ключ таблицы

FieldCode - код поля

FieldValue - значение переменной

зарезервированные коды

DocId SourceTable FieldCode Описание
Код клиента (clients.code) 2 (clients) 1 Дата блокировки клиента. Дата рассчитывается автоматически на основе выставленных не оплаченных счетов. Реализовано, через триггеры таблиц Pays, PayLinks, Clients, Value, Schet
Код клиента (clients.code) 2 (clients) 2 Сумма баланса клиента. Создается и актуализируется скриптом в шедулер из тикета 38731. В поле Summa - баланс, в поле FieldValue - время, занявшее расчет в последний раз в миллисекундах. ldtime - время последнего обновления.
Код клиента (clients.code) 2 (clients) 3 Сумма наличных денег к выдаче клиенту. Создается и актуализируется скриптом в шедулер из тикета 47246. В поле Summa - баланс. ldtime - время последнего обновления.
Код клиента (clients.code) 2 (clients) 4 Сумма безналичных денег к выдаче клиенту. Создается и актуализируется скриптом в шедулер из тикета 47246. В поле Summa - баланс. ldtime - время последнего обновления.

Список значений в поле TypeRecord таблицы Returns

(Персональная благодарность Hitman за уникальную возможность поизучать эти аббревиатуры)

1. RT - обычный возврат, умолчальное значение

2. BD - возврат брака, товар приходуется в "шкаф" независимо от значения галки "Возврат на склад" в номенклатуре

3. RP - возврат брака с заменой, вместо возвращаемого товара выдается аналогичный. Возвращаемый товра приходуется в "шкаф", выдаваемый автоматом добавляется во вложения и списывается со склада

4. RR - служебные записи для возврата брака с заменой, удаляются тут же

5. SD - служебные записи для самовывоза, удаляются тут же

API курьерского интерфейса

Расположено по адресу https://home.courierexe.ru/api/courierapi.php

Регистрация нового устройства

Запрос:

<?xml version="1.0" encoding="UTF-8"?>
  <registerphone>
    <auth login="login" pass="pass"></auth>
  </registerphone>

ИЛИ

<?xml version="1.0" encoding="UTF-8"?>
  <registerphone>
    <auth barcode="143fa0f9e39760309e88d17f08,123"></auth>
  </registerphone>

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <registerphone>
    <ID>02c04c71d08811e39760309e88d17f08</ID>
    <message>Устройство зарегистрировано. Сотрудник Иванов Иван Иванович</message>
  </registerphone>

Прием координат

Координаты отправляются XML-запросом:

<?xml version="1.0" encoding="UTF-8"?>
<setcoords phoneid="34534534534">
  <coord lat="55.680327" lon="37.604456" accuracy="50" RequestDateTime="2014-04-21 18:07:45"></coord>
  <coord lat="55.680337" lon="37.604446" accuracy="45" RequestDateTime="2014-04-21 18:07:55"></coord>
  ...
</setcoords>

Ответ в случае успеха:

<?xml version="1.0" encoding="UTF-8"?>
<setcoords error="0">OK</setcoords>

Ответ в случае ошибки:

<?xml version="1.0" encoding="UTF-8"?>
<setcoords error="1">wrong xml</setcoords>

Запрос заказов

Пример запроса заказов:

<?xml version="1.0" encoding="UTF-8"?>
<getorders phoneid="34534534534" time="TODAY" short="1"></getorders>

Поле time может принимать значения TODAY, TOMORROW, CLOSED и NOBODYS, для запроса заказов "на сегодня", "на завтра", "Закрытых сегодня" и "Ничьих" соответственно. short - 0 - полная выдача заказов 1 - только коды

Ответ возвращается в контейнере getorders и содержит набор заказов в соответствии со структурой order, описанной здесь.

В контейнере order возвращаются дополнительные теги:

  • ldtime - дата и время последнего изменения заказа. Для перезаливки только изменившихся.
  • position - порядковый номер заказа, установленный в бэкофисе. Для сортировки, рассчитанной другими системами, в частности, бекофисом.
  • acceptpartially - признак возможности частичной доставки.
  • basestatus - статус Срочных (справочник 3).
  • refunddate - дата возврата.
  • waitedtime - время ожидания в минутах.
  • arrival - плановая дата прибытия в формате гггг-мм-дд чч:мм:сс.


  • items -> item - Атрибут ItemType. Ссылается на справочник 62.
  • receiver -> pin - ПИН-код для авторизации получателя.
  • Для заказов типа "Забор" добавляется еще контейнер orderlist, в котором перечислены все возможные заказы к забору у клиента. Пример:
<orderlist>
  <order orderno="157000698" ordercode="3393888" orderno2="6432056">
    <barcode>157000698</barcode>
    <packages>
      <package code="33337" strbarcode="ONT0000009002" mass="0" message=""></package>
      <package code="33314" strbarcode="ONT0000009001" mass="0" message=""></package>
    </packages>
  </order>
  <order orderno="789456132134156" ordercode="3393985" orderno2="6432059">
    <barcode>157000771</barcode>
    <packages></packages>
  </order>
</orderlist>

При запросе time="TODAY" в контейнере getorders возвращается атрибуты done_sum с общей суммой инкассированных денег текущим курьером, done_sum_cash - инкассировано наличными, done_sum_card - инкассировано оплат по картам.

Запрос создания доставки и забора

Запрос доставки и забора полностью аналогичен API#Оформление заказа за исключением двух моментов

  1. тег auth передавать не нужно
  2. тег neworder должен содержать аттрибуты авторизации


Для создания заказа тег neworder может быть такой:

Пример запроса:

<?xml version="1.0" encoding="UTF-8"?>
<neworder phoneid="31cf91cbd60611e34460309e88d17f08" givencode="1234567">
  • givencode - Код записи выдачи заказа курьеру


Для создания забора тег neworder может быть такой:

Пример запроса:

<?xml version="1.0" encoding="UTF-8"?>
<neworder phoneid="31cf91cbd60611e34460309e88d17f08" clientcode="123">
  • clientcode - код клиента филиала курьера


Обратите внимание! Метод создания забора выдаст ошибку, если в настройках клиента в разделе Расширенные будет снята галка Разрешить курьерам создавать заборы


Запрос клиентов филиала курьера

Пример запроса: <?xml version="1.0" encoding="UTF-8"?> <getclients phoneid="31cf91cbd60611e34460309e88d17f08" start="0" limit="25">

   <conditions>
       <companycontains>название компании</companycontains>
   </conditions>

</getclients> </source>

  • companycontains - поисковое слово, для фильтрации результатов по названию компании
  • start - "отступ" запроса
  • limit - ограничение количества результата записей запроса

Если start и limit не переданы - отдаются все записи.


Пример ответа:

<?xml version="1.0" encoding="UTF-8"?>
<getclients error="0" total="3" next="F">
    <clients>
        <client>
            <code>2</code>
            <company>ТЕСТ А</company>
        </client>
        <client>
            <code>3</code>
            <company>ПОЧТА РОССИИ</company>
        </client>
    </clients>
</getclients>
  • total - количество найденных клиентов
  • next - T/F - флаг о том, есть ли далее еще страницы
  • code - код клиента
  • company - название клиента


Обратите внимание! Метод выдаст ошибку, если в настройках клиента в разделе Расширенные будет снята галка Разрешить курьерам создавать заборы


Запрос данных клиента

Пример запроса:

<?xml version='1.0' encoding='UTF-8' ?>
<getclientdetail phoneid="31cf91cbd60611e34460309e88d17f08" code="123">
</getclientdetail>
  • code - код клиента филиала курьера


Пример ответа:

<?xml version="1.0" encoding="UTF-8"?>
<clientdetail error="0">
    <client code="123">
        <name>Иван</name>
        <company>ООО Компания</company>
        <town_name>Москва город</town_name>
        <town_code>1</town_code>
        <address>Донецкая ул., 14</address>
        <phone>111</phone>
        <firm>
            <name>Петр</name>
            <company>ООО Компания 2</company>
            <address>Улица Крауля, 8</address>
            <phone>456</phone>
            <town_name>Москва город</town_name>
            <town_code>1</town_code>
        </firm>
    </client>
</clientdetail>
  • code - код клиента филиала курьера
  • name - Контактное лицо
  • company - Компания
  • town_name - Название города
  • town_code - Код города
  • address - Адрес
  • phone - Телефон


  • firm - Вложение получателя
  • name - Контактное лицо
  • company - Компания
  • address - Адрес
  • phone - Телефон
  • town_name - Название города
  • town_code - Код города

Запрос настроек

Пример запроса:

<?xml version="1.0" encoding="UTF-8"?>
<getsettings phoneid="31cf91cbd60611e34460309e88d17f08">
</getsettings>

Пример ответа:

<?xml version="1.0" encoding="UTF-8"?>
<getsettings>
<states6 count="3">
	<state6>
		<code>1</code>
		<name>переехали, абонент сменил адрес</name>
	</state6>
	<state6>
		<code>2</code>
		<name>неточный или неполный адрес, тел., нет</name>
	</state6>
	<state6>
		<code>3</code>
		<name>нет Фирмы по указанному адресу</name>
	</state6>
</states6>

<states8 count="5">
	<state8>
		<code>1</code>
		<name>На руках</name>
		<adv />
	</state8>
	<state8>
		<code>2</code>
		<name>Принято</name>
		<adv>0, 1</adv>
	</state8>
	<state8>
		<code>3</code>
		<name>Не доставлено</name>
	</state8>
	<state8>
		<code>4</code>
		<name>Не доставлено по причине</name>
	</state8>
	<state8>
		<code>5</code>
		<name>Доставлено</name>
	</state8>
</states8>

</stores>
  <store>
    <code>1</code>
    <name>Склад на Ленина</name>
    <address>Ленина ул., 10</address>
    <phone>250-50-50</phone>
    <coordinates lat="55.111" lon="38.100" />
  </store>
  <store>
    <code>2</code>
    <name>Новый склад</name>
    <address>Загородная, 4</address>
    <phone />
    <coordinates lat="55.222" lon="38.200" />
  </store>
  <store>
    <code>3</code>
    <name>Большой склад</name>
    <address>Промышленная ул., 300</address>
    <phone>+79012345678</phone>
    <coordinates lat="55.333" lon="38.300" />
  </store>
</stores>

<settings>
	<AllowCourierCreatePickup>0</AllowCourierCreatePickup>
	<LockOrders>1</LockOrders>
	<pospin>1234</pospin>
	<currency>р.</currency>
  	<chatmanager>1234</chatmanager>
 	<officephone>+74951234567</officephone>
 	<askusername>1</askusername>
	<askusersign>1</askusersign>
	<askphoto>1</askphoto>
	<allownobodys>1</allownobodys>
	<prefixfmc>9</prefixfmc>
	<askresultphonecall>1</askresultphonecall>
	<GivnS3Message>1</GivnS3Message>
	<DefaultHolidays>6, 7</DefaultHolidays>
</settings>
</getsettings>
  • AllowCourierCreatePickup - 0/1 - возможность курьером создавать заборы
  • LockOrders - 0/1 - Запрет выдавать заказы
  • pospin - Пин-код терминала оплаты (пока только 2Can)
  • askusername - Запрашивать ввод ФИО получившего
  • askusersign - Запрашивать подпись получившего
  • askphoto - Запрашивать фото
  • allownobodys - Разрешить забирать невыданные заказы
  • prefixfmc - Префикс FMC, необходим при использовании услуги FMC
  • askresultphonecall - режим сбора результатов звонков: 0 - Запрашивать обязательно, 1- Запрашивать, 2 - Не запрашивать
  • GivnS3Message - Запрашивать примечания для статуса "Не доставлено"
  • DefaultHolidays - Установленные в системе выходные через запятую. 1 - понедельник, 7 - воскресенье.
  • states6 - Причины недоставки. ADV: 2-й Параметр: 1 - Перенос, 0 или пусто - Отказ 3-й Параметр: 1 - Был на адресе.
  • states8 - Статусы доставки.
  • states28 - Причины частичной доставки. Param(adv, 1)=1 - уважительная причина отказа, такие возвраты нужно считать как буд-то покупки при расчете стоимости доставки.
  • states62 - Типы строк вложений. Param(adv, 2)=1 - услуга доставки, которую надо рассчитывать по правилам от суммы заказа.
  • states77 - Статусы звонков.

Установка статусов

Запрос "доставлено"

<?xml version="1.0" encoding="UTF-8"?>
<setstate phoneid="34534534534">
    <order ordercode="1234">
        <status>5</status>
        <basestatus>7</basestatus>
        <message>Иванов Иван</message>
        <date>2014-05-14</date>
        <time>14:20</time>
        <image>sdrgfdergser</image>
        <photos>
            <photo>sdrgfdergser</photo>
            <photo>sdrgfdergser</photo>
        </photos>
        <paymentId>123</paymentId>
        <paytype>CASH</paytype>
        <dateWaitingStart>2018-11-26 17:27:47</dateWaitingStart>
        <parentGivenCode>32433</parentGivenCode>
        <SendTo>79161234567</SendTo>
        <pin>1234</pin>
        <items>
               <item code="482228" quantity="1" governmentCode="010290000033411121svKJcBObwXb:K91002A92/kl4UYKTLljwev0qPGRNh8XVpxN8vZrWQuMpHBsesgYvzMqS9PiLWVf3hSVHNfVxohQ2fud5RcUOschSdu+koA==" />
               <item code="482229" quantity="1" governmentCode="010405915621911121MimQ57zZJBpPt91ffd0929S/IuD8i9VR+vmmTDcQgrUYKTfMsCud0f1cs4WrF3QPTt8GeXZlDQoynO4bep5eyknZNW2pYNvuCsy07AEe6/A==" />
        </items>
    </order>
</setstate>

Частичная доставка без вложений:

<?xml version="1.0" encoding="UTF-8"?>
<setstate phoneid="34534534534">
    <order ordercode="1234">
	<status>1000</status>
	<message>Иванов Иван</message>
	<date>2014-05-14</date>
	<time>14:20</time>
	<price>1500</price>
        <paytype>CARD</paytype>
    </order>
</setstate>

Частичная доставка с вложениями:

<?xml version="1.0" encoding="UTF-8"?>
<setstate phoneid="34534534534">
    <order ordercode="1234">
	<status>1000</status>
	<message>Иванов Иван</message>
	<date>2014-05-14</date>
	<time>14:20</time>
	<price>1500</price>
	<items>
		<item code="1234" quantity="1" />
		<item code="1235" quantity="1" retprice="100" />
		<item code="1236" quantity="0" reason="3" />
	</items>
    </order>
</setstate>
  • quantity указывает количество купленного товара.
  • reason Причина отказа от товара по справочнику states28
  • retprice Стоимость вложения Доставка

Недоставлено:

<?xml version="1.0" encoding="UTF-8"?>
<setstate phoneid="34534534534">
    <order ordercode="1234">
        <status>4</status>
        <reason>5</reason>
        <message>Передумали</message>
        <newdate>2014-05-15</newdate>
        <date>2014-05-14</date>
        <time>14:20</time>
    </order>
</setstate>
  • reason Причина отказа от товара по справочнику states6
  • newdate Новая дата доставки

Принятие невыданных курьерам заказов

Пример запроса:

<?xml version="1.0" encoding="UTF-8"?>
<takeorder phoneid="34534534534">
    <order ordercode="1234" />
</takeorder>

Ответ в случае успеха:

<?xml version="1.0" encoding="UTF-8"?>
<takeorder error="0">OK</takeorder>


Принятие курьером сборки

При сканировании штрих-кода формата EAN13 начинающегося на 2876, нужно отрезать от него 5 первых символов, и 1 последний (контрольная сумма), и передать в метод:

Пример запроса:

<?xml version="1.0" encoding="UTF-8"?>
<extraassembly phoneid="34534534534" shelf="876123456"></extraassembly>

Ответ в случае успеха:

<?xml version="1.0" encoding="UTF-8"?>
<extraassembly error="0">OK</extraassembly>

В случае ошибки показать ошибку. В случае успеха - перезагрузить список заказов.

Осуществление звонков

Пример запроса:

<?xml version="1.0" encoding="UTF-8"?>
<phonecall phoneid="34534534534">
    <order ordercode="1234">
	<phone>79161234567</phone>
    </order>
</phonecall>

Звонок в офис:

<?xml version="1.0" encoding="UTF-8"?>
<phonecall phoneid="34534534534">
    <order ordercode="">
	<phone>OFFICE</phone>
    </order>
</phonecall>

Ответ в случае успеха:

<?xml version="1.0" encoding="UTF-8"?>
<phonecall error="0" id="ferfse-drsgfsdrg">OK</phonecall>

Установка статусов звонков:

<?xml version="1.0" encoding="UTF-8"?>
<setphonecallstate phoneid="34534534534">
    <call ordercode="1234" id="ferfse-drsgfsdrg">
	<state>4</state>
	<newdate>2020-12-03</newdate>
	<newtime_max>20:06</newtime_max>
	<message>Перенос на 14:00</message>
    </call>
</setphonecallstate>

state - код результата по справочнику 77 При установке state = 4 появляется возможность передачи newdate и newtime_max. Если не удалось получить id при запросе звонка, в установке статуса он должен быть пустым.

Передача намерения поехать по адресу

Пример запроса:

<?xml version="1.0" encoding="UTF-8"?>
<goto phoneid="34534534534">
    <order ordercode="1234">
    </order>
</goto>

Ответ в случае успеха:

<?xml version="1.0" encoding="UTF-8"?>
<goto error="0">OK</goto>

Передача истории звонков курьера

Устройство курьера может передавать факты совершенных звонков:

 <?xml version="1.0" encoding="UTF-8"?>
 <setcalls phoneid="34534534534">
   <call phone="2554488" isIncoming="1" startDate="2018-02-07 12:05:31" acceptDate="2018-02-07 12:05:40" endDate="2018-02-07 12:07:22"></call>
   <call phone="+791969782323" isIncoming="0" startDate="2018-02-07 12:08:31" acceptDate="2018-02-07 12:08:40" endDate="2018-02-07 12:10:22"></call>
 </setcalls>

Ответ сервера в случае успеха:

<?xml version="1.0" encoding="UTF-8"?>
<setcalls error="0">OK</setcalls>

Калькулятор стоимости доставки

Устройство курьера отправляет запрос:

<?xml version="1.0" encoding="UTF-8" ?> 
<calculator phoneid="cc56a668761611e8b01ca2efc81c32a8"> 
  <calc townto="1" mass="3.7" order_code="3385499" /> 
</calculator>

где:

  • townto Код города получателя
  • mass Масса отправления
  • order_code Код заказа, из которого производится расчет. Из отправления берется город-отправитель и клиент для определения тарифа.

Сервер отвечает стандартным ответом формата API#Расчет стоимости доставки


Формирование печатных форм заказов принимаемых по забору

Устройство курьера отправляет запрос:

<?xml version="1.0" encoding="UTF-8" ?> 
<waybill phoneid="cc56a668761611e8b01ca2efc81c32a8" givencode="12385"> 
</waybill>

где:

  • givencode Код записи выдачи заказа курьеру

Сервер отвечает стандартным ответом формата API#Получение документов для печати


Автоподстановка городов

Мобильное приложение отправляет запрос формата API#Справочник городов, с отличием в авторизации по phoneid.

<?xml version="1.0" encoding="UTF-8"?>
<townlist phoneid="cc56a668761611e8b01ca2efc81c32a8">
  <conditions>
    <namestarts>мос</namestarts>
  </conditions>
  <limit>
    <limitcount>10</limitcount>
  </limit>
</townlist>

Ответ соответствует приведенной документации.

Автоподстановка улиц

Мобильное приложение отправляет запрос формата API#Справочник улиц, с отличием в авторизации по phoneid.

<?xml version='1.0' encoding='UTF-8' ?>
<streetlist phoneid="ae5d7448951111ea8391a5062fdab603" >
  <conditions>
    <town>1</town>   
    <namecontains>варшавс</namecontains>
  </conditions>
  <limit>
    <limitcount>7</limitcount>
  </limit>
</streetlist>

Ответ соответствует приведенной документации.

Прием онлайн-платежей

В ответе getsttings параметр hasAcquiring = 1 указывает на наличие эквайринга на сервере. Тогда можно отправлять запрос на эквайринг:

<?xml version="1.0" encoding="UTF-8"?>
<acquiring phoneid="34534534534">
    <order ordercode="1234">
	<price>1500</price>
    </order>
</acquiring>


Ответ

<?xml version="1.0" encoding="UTF-8"?>
<acquiring error="0">https://test.courierexe.ru/8/bill?c=3446929</acquiring>

Ссылку передаем покупателю.

При оплате получаем PUSH на курьерское устройство.

{"order":"dsf005643","address":3447071,"sum":1.02,"paymentId":"1MwnMDerMIK","extraclientcode":8}

Доступ курьеров с компьютера

Механизм предназначен для предоставления курьерам возможности работы с персонального компьютера. Алгоритм доступа следующий:

1. В мобильном приложении курьер нажимает кнопку "Получить доступ с компьютера"

2. Приложение запрашивает у API пин-код:

<?xml version="1.0" encoding="utf-8"?>
<getpincode phoneid="34534534534" />

В ответ приложение получает пин-код:

<?xml version="1.0" encoding="utf-8"?>
<getpincode>
    <pincode>1234</pincode>
</getpincode>

Приложение отображает пин-код курьеру и ссылку на ЛК для курьеров: https://home.courierexe.ru/courier

Обратите внимание, что пин-код действует 5 минут!

3. В ЛК курьер вводит полученный пин-код и авторизуется в ЛК. При этом выполняется запрос получения токена по пин-коду:

<?xml version="1.0" encoding="utf-8"?>
<gettoken pincode="1234" />

В ответ приходит значение токена:

<?xml version="1.0" encoding="utf-8"?>
<gettoken>
    <token>1e6b709aeaf61</token>
</gettoken>

В ЛК курьеры могут просмотреть заказы "На завтра", а полученный при авторизации токен отображается в ЛК.

Обратите внимание, что авторизация в АПИ курьеров возможна по ранее полученному токену. Например, запрос настроек:

<?xml version="1.0" encoding="UTF-8"?>
<getsettings token="1e6b709aeaf61">
</getsettings>

API геокодирования

Расположено по адресу https://home.courierexe.ru/api/geocodeapi.php

Запрос координат по адресу

Запрос

<?xml version="1.0" encoding="UTF-8"?>
<geocode>
  <town>Москва город</town>
  <address>Красная пл., 1</address>
</geocode>

Ответ

<?xml version="1.0" encoding="UTF-8"?>
<geocode>
  <lat>54.23214324</lat>
  <lon>54.23214324</lon>
</geocode>

Отправка PUSH уведомлений курьеру

Расположено по адресу https://home.courierexe.ru/api/clientapi.php (доступно для отправки функцией sendToMeaSoft)

<?xml version="1.0" encoding="UTF-8"?>
            <sendpush>
                <auth guid="534534534534534"></auth>
                <courier>4324</courier>
                <subject>Заголовок сообщения</subject>
                <text>Текст сообщения</text>
                <addresscode></addresscode>
            </sendpush>

Описание полей:

  • guid - GUID авторизации MeaSoft
  • courier - Код курьера для отправки. Не обязательный параметр. Если опустить - сообщение отправится всем курьерам компании.
  • subject - Тема сообщения
  • text - Текст сообщения
  • addresscode - Код адреса, к которому относится сообщение. Не обязательный параметр.

Ответ:

<?xml version="1.0" encoding="UTF-8"?>
  <sendpush>
    <error>0</error>
    <errormsg></errormsg>
    <messageid>kjbn54kjn435kj4n5</messageid>
  </sendpush>

Проверка статуса сообщения (пока не поддерживается для PUSH!): Запрос: GET https://home.courierexe.ru/messages/status?messageid=emu58129

Ответ:

{"code":0,"messageid":"emu58129","status":"Delivered","statustime":"2020-07-13 15:39:01","description":""}
  • code - номер ошибки, 0 - нет ошибок.
  • status - статус доставки:
    • Delivered - доставлено;
    • Transmitted - передано оператору, от вас смс получили и отправили оператору, оператор еще не обработал, причиной может быть когда абонент вне зоны сети или выключен;
    • NotDelivered - не доставлено, обычно причиной может быть то что абонент блокируется со стороны оператора;
    • Rejected - один из основных причин это то что номер находится в черном списке;
    • Failed - ошибка при отправки запроса(например когда адрес отправителя указан неверно);
    • Expired - срок жизни смс истек.

Алгоритм поиска заказа по штрих-коду

В системе используются штрих-коды 2-х видов: EAN13 и CODE128. Могут применяться и другие, вплоть до qr-code, но они приравниваются в применении к code128. Формирование штрих-кодов формата EAN-13 подробно описано в разделе "Формат штрих-кодов" данной статьи.

Итак, при поступлении отсканированного штрих-кода в программу, алгоритм работы с ним должен быть следующий:

1) Определяем, есть ли это наш EAN-13, для этого штрих-код должен соответствовать всем критериям:

  • 13 знаков в длину.
  • Все знаки - цифры.
  • Первая цифра - 2.
  • Вторая цифра - 5, 6, или 7.
  • Последняя цифра соответствует контрольной сумме, вычисляемой по соответствующему алгоритму.

2) Если код оказался EAN-13, иначе сразу п.3:

  • Отбрасываем от него первые 4 знака и 1 последний. Получаем 8 знаков.
  • По полученным 8-ми знакам ищем в orders->ordercode без учета начальных нулей.
  • Если нашли - завершаем процедуру.

3) Берем исходный штрих-код, и ищем в order->barcode. При этом в поле order->barcode могут содержаться символы-маски "_", заменяющие любой символ, как операторе SQL "like".

Например: от сканера пришло "123456", а в процессе поиска в БД найден barcode "1234__" (с 2мя нижними подчеркиваниями) - такой заказ подходит.
Поиск можно делать запросом select * from orders where '123456' like barcode

Если нашли - завершаем процедуру.

4) Берем исходный штрих-код, и ищем в order->orderno. Если нашли - завершаем процедуру. Если нашли - завершаем процедуру.

5) Не нашли, возвращаем ошибку "Штрих-код не найден"

Инструкции

Описание формата данных в поле givn.instructions и base.instructions Данное поле используется в синхронизации с ЛК, когда необходимо обновить поля в связанной таблице. В случае, если раздельно записи обновлять нельзя, т.к. изменения связанной записи могут быть отменены триггером или пользователем. Инструкции это текстовая строка , параметры в которой разделены запятыми. Нумерация параметров идет с 1. Все типы данных записываются в формате данных SQL. Инструкции могут установить NULL в поле, если оно поддерживает такое значение. Когда параметр текстовый и содержит запятую, то его обязательно нужно экранировать. Дата и время следует записывать так:2020-03-01 и 10:34:00. Для double, разделитель дробной части - точка. Если извлеченный параметр пустой, то значение считается не указанным и пропускается.

описание поле тип поля пример Is Null
1 плановая дата доставки address.date_putn DATE 2020-04-22 или '2020-04-22' NULL
2 тип платежа address.PaymentType INT 2
3 идентификатор платежа addressfld.PaymentID VARCHAR 'GDFKG4-GHJCAFDHG4-DGHKLKKSAB' NULL
4 наложенный платеж address.rur DOUBLE 1024.5 NULL
5 ожидание address.Waited INT 15
6 плановый курьер address.ToKurier INT 78
7 телефон получателя используется в функции CreateTrans VARCHAR +79873936430
8 дата вручения address.date_put DATE 2020-04-01 или '2020-04-01' NULL
9 время вручения address.time_put TIME 10:24:00 NULL
10 инфо о доставке address.message VARCHAR 'Сергей, лично в руки'
11 время переноса доставки минимальное newtime_min (элемент запроса) TIME '10:24'
12 время переноса доставки максимальное newtime_max (элемент запроса) TIME '19:25'
13 сумма транзакции transactionAmount (элемент запроса) DOUBLE 123.45
Пример инструкций
2020-03-01, , , 50.50, 1, , ,'2020-03-27', '12:13:00'
NULL,2,'DSKFJG56456-DFKG54-GFHFGH' , 50.50, 1, , ,,
, , , , 0, , admin@courierexe.ru, 2020-04-17, 11:50:00, 'Сергей, лично в ''руки''', '10:24', '19:25', 123.45