Исходный код вики Протокол интеграции систем внешних наливов с Топаз "Web Офис"
Версия 2.1 от Ярослава Ерина на 2024/07/30 05:18
Скрыть последних авторов
| author | version | line-number | content |
|---|---|---|---|
![]() |
1.1 | 1 | ====== **v 1.0.1** ====== |
| 2 | |||
| 3 | == Настройка перед интеграцией == | ||
| 4 | |||
| 5 | |||
| 6 | Перед началом интеграции, уполномоченный сотрудник компании, предоставляющей услуги внешних наливов, передает в ООО "Топаз-сервис" следующую информацию: | ||
| 7 | |||
| 8 | 1. Базовый url тестового окружения системы внешнего налива | ||
| 9 | 1. Список ip адресов, с которых будут приходить запросы от тестового окружения системы внешнего налива | ||
| 10 | 1. Базовый url боевого окружения системы внешнего налива | ||
| 11 | 1. Список ip адресов, с которых будут приходить запросы от боевого окружения системы внешнего налива | ||
| 12 | 1. Официальное название системы внешних наливов, которое будет указано в Топаз "Web Офис" | ||
| 13 | 1. Иконку системы внешних наливов в формате svg с соотношением сторон 1:1 | ||
| 14 | |||
| 15 | После получения информации по указанным пунктам, от ООО "Топаз-сервис" будет предоставлен тестовый доступ для настройки интеграции. | ||
| 16 | |||
| 17 | Также будет предоставлен секретный ключ (тестового и боевого окружения) для идентификации системы внешних наливов в Топаз "Web Офис". Данный ключ необходимо будет передавать во всех запросах от внешней системы в Топаз "Web Офис" в заголовке externalSystemApikey | ||
| 18 | |||
| 19 | == Получение списка АЗС и их конфигураций == | ||
| 20 | |||
| 21 | Внешняя система опрашивает Топаз "Web Офис" для получения списка АЗС и их конфигураций **через HTTP **запрос на **url **с префиксом **/integration/station?apikey={apikey **}, запрос типа **GET **, timeout 10 секунд. | ||
| 22 | |||
| 23 | В ответ Топаз "Web Офис" дает ответ в формате **JSON** | ||
| 24 | |||
| 25 | **...** | ||
| 26 | |||
![]() |
2.1 | 27 | **{{code language="javascript" layout="LINENUMBERS"}}{ // идентификатор станции АЗС string Id // статус станции: true – доступна, false – выключена bool Enable, // наименование станции string Name, // адрес станции string Address, // гео точка на карте location Location { double Lat, double Lon }, // словарь доступных ТРК Dictionary Columns { // номер колонки (int32) Key: { // список доступных типов топлива "Fuels": [ "a92", "a95", "diesel_premium", ... N ] } } ... N }{{/code}}** |
![]() |
1.1 | 28 | |
![]() |
2.1 | 29 | {{{{ // идентификатор станции АЗС string Id // статус станции: true – доступна, false – выключена bool Enable, // наименование станции string Name, // адрес станции string Address, // гео точка на карте location Location { double Lat, double Lon }, // словарь доступных ТРК Dictionary Columns { // номер колонки (int32) Key: { // список доступных типов топлива "Fuels": [ "a92", "a95", "diesel_premium", ... N ] } } ... N }}}} |
| 30 | |||
![]() |
1.1 | 31 | **Возможные идентификаторы топлива** |
| 32 | |||
| 33 | |ID|Марка | ||
| 34 | |diesel|дизель | ||
| 35 | |diesel_premium|брендированный дизель | ||
| 36 | |a80|бензин марки А80 | ||
| 37 | |a92|бензин марки А92 | ||
| 38 | |a92_premium|брендированный бензин марки А92 | ||
| 39 | |a95|бензин марки А95 | ||
| 40 | |a95_premium|брендированный бензин марки А95 | ||
| 41 | |a98|бензин марки А98 | ||
| 42 | |a98_premium|брендированный бензин марки А98 | ||
| 43 | |a100|бензин марки А100 | ||
| 44 | |a100_premium|брендированный бензин марки А100 | ||
| 45 | |propane|газ пропан | ||
| 46 | |metan|метан | ||
| 47 | |||
| 48 | == Получение прайс-листа == | ||
| 49 | |||
| 50 | Внешняя система опрашивает Топаз "Web Офис" для получения прайс-листа **HTTP **запросом на **url **с префиксом **/integration/price?apikey={apikey} **, запрос типа **GET **, timeout 10секунд. | ||
| 51 | |||
| 52 | В ответ Топаз "Web Офис" дает ответ в формате **JSON** | ||
| 53 | |||
![]() |
2.1 | 54 | {{{{ { // идентификатор станции внутри Топаз "Web Офис" string StationId, // идентификатор топлива string ProductId, // цена за 1 литр double Price }, …. N }}}} |
![]() |
1.1 | 55 | |
| 56 | **Пример ответа** | ||
| 57 | |||
![]() |
2.1 | 58 | {{{{ {“StationId”: “0001”, “ProductId”: “a92”, “Price”: 38.66}, {“StationId”: “0001”, “ProductId”: “a95_premium”, “Price”: 45.21}, {“StationId”: “0002”, “ProductId”: “a92”, “Price”: 38.98}, }}}} |
![]() |
1.1 | 59 | |
| 60 | == Обработка заказа == | ||
| 61 | |||
| 62 | [[image:https://wiki.topazelectro.ru/download/attachments/1179735/image2023-1-19_16-21-33.png?version=1&modificationDate=1716374642000&api=v2]] | ||
| 63 | |||
| 64 | Информирование Топаз "Web Офис" о заказе и их статусах осуществляется **HTTP **запросом на **url **с префиксом **/integration/order **, запрос типа **POST **, timeout 10 секунд. | ||
| 65 | |||
| 66 | |||
| 67 | **Тело запроса содержит JSON вида Order** | ||
| 68 | |||
![]() |
2.1 | 69 | {{{{ // идентификатор заказа string Id // дата и время создания в UTC, формат даты yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z' либо yyyy-MM-dd HH:mm:ss String DateCreate // значение заказа double OrderVolume // идентификатор станции АЗС string StationExtendedId // номер колонки int ColumnId // идентификатор топлива string FuelId // стоимость 1 литра топлива double PriceFuel // сумма заказа double Sum // кол-во литров double Litre // итого оплачено double SumPaid // статус заказа OrderStatus Status // дата и время завершения заказа UTC, формат даты yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z' либо yyyy-MM-dd HH:mm:ss String DateEnd // идентификатор причины отмены заказа string ReasonId // причина отмены string Reason // итого сумма литров залито double LitreCompleted // итого оплачено по завершению заказа double SumPaidCompleted // идентификатор договора string ContractId }}}} |
![]() |
1.1 | 70 | |
| 71 | Параметр **OrderType **– тип заказа может принимать следующие значения: | ||
| 72 | |||
| 73 | * **Money **– заправка на фиксированную сумму, **OrderVolume **– сумма рублей | ||
| 74 | * **Liters **– заправка на литры, **OrderVolume **– кол-вол литров | ||
| 75 | |||
| 76 | Параметр **Status **– статус заказа может принимать следующие значения | ||
| 77 | |||
| 78 | * **OrderCreated **– заказ создан и полностью оплачен | ||
| 79 | * **Expire **– статус от АЗС не поступил в течение 30 минут | ||
| 80 | * **Completed **– заказа завершен успешно | ||
| 81 | * **StationCanceled **– заказ отменен оператором АЗС или же Топаз "Web Офис" | ||
| 82 | * **UserCanceled **– заказ отменен пользователем | ||
| 83 | |||
| 84 | Параметр **ContractId **– стандартными типами договора, по которому обрабатывается заказ | ||
| 85 | |||
| 86 | * **Individual **– договор возмездного оказания услуг (физические лица) | ||
| 87 | * **Corporation **- договор купли продажи топлива (юридические лица) | ||
| 88 | |||
| 89 | Так же можно указать любые другие типы договора по договоренности между сетью АЗС и внешней системой. | ||
| 90 | |||
| 91 | При получении заказа в статусе **OrderCreated **Топаз "Web Офис" проверяет ряд параметров **StationExtendedId **– в случае если идентификатор станции не найден в Топаз "Web Офис", то Топаз "Web Офис" дает ответ **400** | ||
| 92 | |||
| 93 | **FuelId **+ **PriceFuel **– в случае если стоимость топлива в Топаз "Web Офис" отличается от присланной, то Топаз "Web Офис" дает ответ **402** | ||
| 94 | |||
| 95 | == Передача статусов о заказе == | ||
| 96 | |||
| 97 | === Статус Accept === | ||
| 98 | |||
| 99 | Данный статус сообщает внешней системе о том, что заказ принят и обработан в Топаз "Web Офис" | ||
| 100 | |||
| 101 | Данный статус Топаз "Web Офис"отсылает после того, как были произведены некоторые действия с заказом (например, заказ сохранен в базе данных) и система готова перейти на следующий шаг | ||
| 102 | |||
| 103 | В случае если внешняя система дала ответ, отличный от **200 ОК **, то Топаз "Web Офис" отсылает статус Canceled и прекращает обработку заказ | ||
| 104 | |||
| 105 | **базовый url + /api/order/accept POST** | ||
| 106 | |||
| 107 | **apikey={apikey}&orderId={ordeId}** | ||
| 108 | |||
| 109 | все параметры являются обязательными | ||
| 110 | |||
| 111 | === Статус Fueling === | ||
| 112 | |||
| 113 | Данный статус сообщает внешней системе о том, что Топаз "Web Офис" готов запустить колонку (начать пролив) | ||
| 114 | |||
| 115 | Данный статус Топаз "Web Офис" отсылает перед началом пуска колонки | ||
| 116 | |||
| 117 | В случае если внешняя система дала ответ, отличный от **200 ОК **, то Топаз "Web Офис" отсылает статус Canceled и прекращает обработку заказ | ||
| 118 | |||
| 119 | **базовый url + /api/order/fueling POST** | ||
| 120 | |||
| 121 | **apikey={apikey}&orderId={ordeId}** | ||
| 122 | |||
| 123 | все параметры являются обязательными | ||
| 124 | |||
| 125 | === Статус Canceled === | ||
| 126 | |||
| 127 | Данный статус сообщает внешней системе о том, что заказ следует отменить | ||
| 128 | |||
| 129 | **базовый url + /api/order/canceled** | ||
| 130 | |||
| 131 | **POST** | ||
| 132 | |||
| 133 | **apikey={apikey}&orderId={ordeId}&reason={reason}** | ||
| 134 | |||
| 135 | все параметры являются обязательными | ||
| 136 | |||
| 137 | **reason – **текстовая причина отмены | ||
| 138 | |||
| 139 | === Статус Completed === | ||
| 140 | |||
| 141 | Данный статус сообщает внешней системе о том, что заказ выполнен и топливо залито | ||
| 142 | |||
| 143 | В случае если внешняя система дала ответ отличный от **200 ОК **, то Топаз "Web Офис" отсылает запросы с некоторым отложенным количеством времени до момента получения ответа **200 ОК** | ||
| 144 | |||
| 145 | **базовый url + /api/order/completed POST** | ||
| 146 | |||
| 147 | **apikey={apikey}&orderId={ordeId}&litre={litre}&extendedOrderId={extendedOrderId}&** | ||
| 148 | |||
| 149 | **extendedDate={extendedDate}** | ||
| 150 | |||
| 151 | все параметры являются обязательными | ||
| 152 | |||
| 153 | **litre **– кол-во пролитых литров, указывается как **double **с разделителем точка **extendedOrderId **– идентификатор заказа в АСУ сети | ||
| 154 | |||
| 155 | **extendedDate **– дата по которой АСУ строит отчет для сверки, формат **dd.MM.yyyy HH:mm:ss** | ||
| 156 | |||
| 157 | === Отправка счетчика налива === | ||
| 158 | |||
| 159 | В момент процесса налива Топаз "Web Офис" может сообщать внешней системе статус счетчика налива | ||
| 160 | |||
| 161 | Для этого с периодичностью от 5 – 10 секунд Топаз "Web Офис" выполняет следующий запрос | ||
| 162 | |||
| 163 | **базовый url + /api/order/volume** | ||
| 164 | |||
| 165 | **POST** | ||
| 166 | |||
| 167 | **apikey={apikey}&orderId={ordeId}&litre={litre}** | ||
| 168 | |||
| 169 | все параметры являются обязательными | ||
| 170 | |||
| 171 | **litre **– кол-во пролитых на момент отправки запроса литров, указывается как double с разделителем точка | ||
| 172 | |||
| 173 | == Проверка статуса работы станции == | ||
| 174 | |||
| 175 | Перед формирование заказ внешняя система делает запрос на станцию для определения доступности и готовности станции принять заказ url с префиксом | ||
| 176 | |||
| 177 | **/integration/ping?apikey={apikey}&stationId={stationId}&columnId={columnId}, stationId **– идентификатор станции | ||
| 178 | |||
| 179 | **columnId **– идентификатор ТРК | ||
| 180 | |||
| 181 | запрос типа **GET **, timeout 10 секунд. | ||
| 182 | |||
| 183 | == Статусы ответов == | ||
| 184 | |||
| 185 | **200 ОК **– станция и ТРК готова принять и обработать заказ | ||
| 186 | |||
| 187 | **400 **– станция или ТРК не найдена (не верный идентификатор станции или ТРК) **404 **– ТРК занята / ТРК не готова принять заказ | ||
| 188 | |||
| 189 | любой ответ не **200 ОК **– интерпретируется как на станции нет интернета / станция не доступна |
