API Benzuber (с эквайрингом) – расширение протокола API-Benzuber для возможности проведения оплаты за топливо, используя эквайринговые возможности Benzuber.
Для реализации взаимодействия партнёру необходимо реализовать запросы:
Для обеспечения безопасного доступа и идентификации партнера для работы с протоколом предоставляется уникальный ключ apikey
, который используется во всех запросах.
Базовый URL_BZ
– адрес для обращения к серверу Benzuber. Все запросы выполняются HTTP/HTTPS запросами (GET или POST) вида: URL_BZ + /команда/?apikey={apikey}
HTTP коды ответа:
200 – запрос выполнен успешно
401 – ошибка авторизации, доступ запрещен
4хх, 5хх – ошибка при выполнении запроса
в случае ошибки при выполнении запроса в ответе будет содержаться информация
{
"error":string, //идентификатор ошибки
"error_description":string //описание ошибки
}
Для возможности выполнения заправок пользователям, в приложении партнёра, должны быть реализованы механизмы авторизации пользователя на стороне Benzuber, а также реализованы сценарии работы с банковскими картами, которые пользователь планирует использовать.
/user/{phone}/init/
Инициирование авторизации пользователя по номеру телефона, отправка SMS сообщения пользователю для подтверждения
/user/{phone}/init/{pin}/
Передача полученного PIN-кода из SMS сообщения для подтверждения авторизации пользователя
/user/{authid}/state/
Получение информации о текущем статусе авторизации пользователя и списка доступных платежных средств
/user/{authid}/logout/
Удаление авторизации пользователя в сервисе Benzuber
/user/{authid}/card/attach/
Инициирование привязки банковской карты к профилю пользователя, с вызовом банковской формы для ввода реквизитов карты
/user/{authid}/card/attach/{attachid}/state/
Получение информации о состоянии инициированной ранее привязки банковской карты
/user/{authid}/card/{cardid}/remove/
Удаление привязанной карты из профиля пользователя
Запросы по работе с АЗС и постановки заказа аналогичны запросам общего протокола API-Benzuber, с добавлением необходимых данных связанных с пользователем и его методом оплаты.
/stations/
Получение списка станций доступных партнеру, с гео-данными, доступными видами топлива и структурой ТРК на каждой станции.
/price/
Получение информации о ценах на топливо на всех доступных партнёру АЗС.
/stations/{stationid}/columns/
Получение информации по станции, структура и доступность колонок (ТРК), доступные виды топлива на каждой колонке и цены на топливо. Рекомендуется запрашивать для получения оперативной информации о станции.
/order/
Передача запроса на выполнение топливного заказа, с указанием пользователя и метода оплаты
/order/{orderid}/cancel/
Возможность инициировать отмену ранее созданного заказа партнёром.
/order/{orderid}/state/
Получение информации о ранее созданном заказе партнёра
При выполнении сценария обработки заказа, партнёр получает запросы-уведомления.
/order/accept/
Подтверждение приёма заказа от партнёра
/order/volume/
Уведомление о текущем объеме налитого топлива, при выполнении заказа
/order/
Уведомление о текущем состоянии заказа
Инициирование авторизации пользователя по номеру телефона, отправка SMS сообщения пользователю для подтверждения. У высланного кода установлен срок действия 10 минут. В случае повторной отправки запроса в этот период - новой SMS отправлено не будет, а в ответе будет информация о сроке действия высланного кода.
Запрос
(GET) URL_BZ + /user/{phone}/init/
Параметр | Описание |
---|---|
Обязательный phone |
Строка номер телефона пользователя. 11 цифр в формате 79ххххххххх |
Ответ
Content type: application/json
{
"authExpiration": (string)
}
Параметр | Описание |
---|---|
Обязательный authExpiration |
Строка количество секунд до окончания действия высланного PIN-кода |
Возможные ошибки
error | error_description |
---|---|
invalid phone | недопустимый номер сотового телефона |
Передача полученного PIN-кода из SMS сообщения для подтверждения авторизации пользователя. В случае передачи верного кода, в ответ будет передан идентификатор пользователя authId
, который используется в дальнейшем для идентификации пользователя.
Идентификатор является действующим в течение 30 дней, и автоматически продлевается при использовании сервиса пользователем.
Запрос
(GET) URL_BZ + /user/{phone}/init/{pin}/
Параметр | Описание |
---|---|
Обязательный phone |
Строка номер телефона пользователя. 11 цифр в формате 79ххххххххх |
Обязательный pin |
Строка PIN-код полученный пользователем в SMS |
Ответ
Content type: application/json
{
"authId": (string),
"isOrderAvailable" : (boolean),
"userCards" : [
{
"id": (numeric),
"title" : (string)
},
...
]
}
Параметр | Описание |
---|---|
Обязательный authId |
Строка Идентификатор пользователя партнёра в Benzuber. |
Обязательный isOrderAvailable |
Bolean Признак доступности заправки для пользователя true - доступно, false - заправка запрещена |
Обязательный userCards |
Массив Список доступных банковских карт пользователя. Каждый элемент списка структура вида {"id" - идентификатор карты, "title" - представление карты}. Например {"id":34,"title":"МИР ** 1232"} |
Возможные ошибки
error | error_description |
---|---|
invalid pin | предоставлен неверный PIN-код |
pin expired | срок действия PIN-кода закончился |
invalid phone | недопустимый номер сотового телефона |
Получение информации о текущем статусе авторизации пользователя и списка доступных платежных средств
Запрос
(GET) URL_BZ + /user/{authId}/state/
Параметр | Описание |
---|---|
Обязательный authId |
Строка Идентификатор пользователя, полученный при авторизации в Benzuber |
Ответ
Content type: application/json
{
"clientPhone": (string),
"isOrderAvailable" : (boolean),
"userCards" : [
{
"id": (numeric),
"title" : (string)
},
...
]
}
Параметр | Описание |
---|---|
Обязательный clientPhone |
Строка Номер телефона пользователя |
Обязательный isOrderAvailable |
Bolean Признак доступности заправки для пользователя true - доступно, false - заправка запрещена |
Обязательный userCards |
Массив Список доступных банковских карт пользователя. Каждый элемент списка структура вида {"id" - идентификатор карты, "title" - представление карты}. Например {"id":34,"title":"МИР ** 1232"} |
Возможные ошибки
error | error_description |
---|---|
auth expired | Идентификатор пользователя неверный (в том числе просрочен) |
Удаление авторизации пользователя в сервисе Benzuber.
Запрос
(GET) URL_BZ + /user/{authId}/logout/
Параметр | Описание |
---|---|
Обязательный authId |
Строка Идентификатор пользователя, полученный при авторизации в Benzuber |
Ответ
Content type: application/json
{
"status": "ok"
}
Инициирование привязки банковской карты к профилю пользователя, с вызовом банковской формы для ввода реквизитов карты
Запрос
(POST) URL_BZ + /user/{authId}/card/attach/
Request body schema application/json
{
"return": (string)
}
Параметр | Описание |
---|---|
Обязательный authId |
Строка Идентификатор пользователя, полученный при авторизации в Benzuber |
Обязательный return |
Строка URL адрес, на который следует вернуть пользователя после ввода реквизитов карты на платежной форме |
Ответ
Content type: application/json
{
"attachId": (string),
"redirectUrl" : (boolean)
}
Параметр | Описание |
---|---|
Обязательный attachId |
Строка Идентификатор сессии привязки карты |
Обязательный redirectUrl |
Строка URL-адрес, платежной формы, которую нужно открыть для пользователя для ввода реквизитов карты |
Возможные ошибки
error | error_description |
---|---|
auth expired | Идентификатор пользователя неверный (в том числе просрочен) |
invalid request | не указаны обязательные параметры |
Получение информации о состоянии инициированной ранее привязки банковской карты
Запрос
(POST) URL_BZ + /user/{authId}/card/attach/{attachid}/state/
Параметр | Описание |
---|---|
Обязательный authId |
Строка Идентификатор пользователя, полученный при авторизации в Benzuber |
Обязательный attachid |
Строка Идентификатор сессии привязки карты |
Ответ
Content type: application/json
{
"status": (string)
}
Параметр | Описание |
---|---|
Обязательный status |
Строка Текущий статус привязки карты: "ok" - карта успешно привязана "failed" - привязка карты не удалась "progress" - идет обработка сценария привязки карты |
Возможные ошибки
error | error_description |
---|---|
attach not found | Идентификатор сессии привязки карта неверный (не найден) |
auth expired | Идентификатор пользователя неверный (в том числе просрочен) |
Удаление привязанной карты из профиля пользователя
Запрос
(POST) URL_BZ + /user/{authId}/card/attach/{cardid}/remove/
Параметр | Описание |
---|---|
Обязательный authId |
Строка Идентификатор пользователя, полученный при авторизации в Benzuber |
Обязательный cardid |
Строка Идентификатор привязанной карты пользователя |
Ответ
Content type: application/json
{
"status": "ok"
}
Возможные ошибки
error | error_description |
---|---|
card not found | Идентификатор карты неверный (не найден) |
auth expired | Идентификатор пользователя неверный (в том числе просрочен) |
Запросы по работе с АЗС и постановки заказа аналогичны запросам общего протокола API-Benzuber, с добавлением необходимых данных связанных с пользователем и его методом оплаты.
Получение информации о станциях доступных для партнера.
Запрос
(GET) URL_BZ + /stations/
Ответ
Content type: application/json
[
{
"StationID": "Номер",
"Name": "Название",
"Brand": "Название сети АЗС",
"City": "Город, регион",
"Address": "Адрес станции",
"Postpay": false,
"OrderBefore": false,
"TakeBefore": false,
"MaxTotal": 9990,
"Fuels": [
{
"Id": "a92",
"Marka": "АИ-92"
},
...
], //fuels
"Location":
{
"Lat": 56.839703,
"Lon": 60.267601
},
"Columns":
{"1": {"ColumnNumber":"1", "Fuels": ["a92","diesel"]},
...
}
},
{"StationID": ...},
...
]
Описание параметров
Запрос актуального списка цен на доступные виды топлива на станции.
Запрос
(GET) URL_BZ + /price/
Ответ
Content type: application/json
[
{
"StationId": "3",
"ProductID": "a92",
"Price": 42.43,
},
{"StationId":...},
...
]
Описание параметров
Получение информации по станции, структура и доступность колонок (ТРК), доступные виды топлива на каждой колонке и цены на топливо.
Запрос
(GET) URL_BZ + /stations/{stationid}/columns/
Параметр | Описание |
---|---|
Обязательный stationId |
Число Идентификатор станции |
Ответ
Content type: application/json
[
{
"ColumnId": "1",
"ColumnNumber": "1",
"ColumnLocked": false,
"Products": [
{
"ProductId": "a92",
"ProductName": "АИ-92",
"ProductDescr": "АИ-92",
"ProductPrice": 41.1,
"IsTaken": true
},
...
],
"UnpaidOrder":
{
"ProductId":"a100_premium",
"Litre":"12.80",
"Sum":"659.07",
"ExtendedId":"vmkl3y...s6freyfkz"
}
},
{"ColumnId": ...},
...
]
Описание параметров
Передача запроса на выполнение топливного заказа, с указанием пользователя и метода оплаты
Запрос
(POST)URL_BZ + /order/
Request body schema application/json
{
"authid":(string),
"cardid":(string),
"stationextendedid":(int),
"columnid":(int),
"fuelid":(string),
"pricefuel":(double),
"sum":(double),
"extendedid":(string),
}
Описание параметров
Ответ
Content type: application/json
{
"orderId": (sting)
}
Параметр | Описание |
---|---|
Обязательный orderId |
Строка Идентификатор созданного заказа |
Возможные ошибки
error | error_description |
---|---|
invalid request | Отсутствуют обязательные параметры в запросе |
auth expired | Идентификатор пользователя неверный (в том числе просрочен) |
client rejected | Пользователю недоступна заправка |
invalid cardid | Идентификатор банковской карты пользователя не найден |
station not found | АЗС не найдена, или недоступна для партнёра |
station unavailable | АЗС не может принять заказа в текущий момент |
invalid price | Цена в заказе отличается от цены на АЗС |
pump unavailable | Указанный в заказе колонка (ТРК) отсутствует на АЗС |
pump busy | ТРК занята |
fuel unavailable | Указанный в заказе вид топлива отсутствует на ТРК |
invalid sum | Неверная сумма заказа (в том числе, меньше минимальной или больше максимальной допустимых) |
internal error | внутренняя ошибка сервера, заказ не создан |
Возможность инициировать отмену ранее созданного заказа партнёром.
Запрос
(GET)URL_BZ + /order/{orderid}/cancel/
Параметр | Описание |
---|---|
Обязательный orderId |
Строка Идентификатор созданного заказа |
Ответ
Content type: application/json
{
"status": (string)
}
Параметр | Описание |
---|---|
Обязательный status |
Строка Статус исполнения запроса: "ok" - заказ отменен "progress" - запрос на отмену заказа передан на АЗС, подтверждение отмены еще не получено "failed" - отмена заказа невозможна (уже завершен налив) |
Возможные ошибки
error | error_description |
---|---|
order not found | Идентификатор заказа не найден |
Получение информации о ранее созданном заказе партнёра
Запрос
(GET)URL_BZ + /order/{orderid}/state/
Параметр | Описание |
---|---|
Обязательный orderId |
Строка Идентификатор созданного заказа |
Ответ
Content type: application/json
{
"Id":(string),
"Status":(string),
"UserId":(string),
"DateCreate":(string),
"DateEnd":(string),
"OrderType":(string),
"OrderVolume":(string),
"StationId":(string),
"ColumnId":(int),
"FuelId":(string),
"FuelMarka":(string),
"PriceFuel":(double),
"Sum":(double),
"Litre":(double),
"SumPaidCard":(double),
"SumPaid":(double),
"LitreCompleted":(double),
"SumPaidCardCompleted":(double),
"SumPaidCompleted":(double),
"ReasonId":(string),
"Reason":(string),
"Receipt":(string)
}
Описание параметров
Возможные ошибки
error | error_description |
---|---|
order not found | Идентификатор заказа не найден |
При выполнении сценария обработки заказа, партнёр получает запросы-уведомления.
URL_PS
– адрес для обращения к серверу Партнёра, устанавливается в настройках интеграции.
Запрос сообщает партнеру о том, что заказ принят и обработан сервером Benzuber.
Данный запрос отправляет после того как были произведены определённые действия с заказом, проверено соответствие параметров, заказ сохранен в базе данных, и система готова перейти на следующий шаг.
Запрос
(GET) URL_PS + /order/accept?apikey={apikey}&orderId={orderId}
Параметр | Описание |
---|---|
Обязательный apikey |
Строка Ключ авторизации |
Обязательный orderId |
Строка Идентификатор заказа |
Ответ
В случае если партнер дал ответ отличный от 200 ОК, то заказ отменяется и обработка заказа завершается.
В случае положительного ответа - происходит холдирование денежных средств на карте пользователя и заказ передается на АЗС
Выполнение запроса происходит с периодичностью от 2 до 5 секунд, по факту получения информации от АЗС. Ответ на запрос от партнера не контролируется, и повторно не отправляется. Некоторые АЗС не поддерживают передачу информации о ходе налива.
Запрос
(GET) URL_PS + /order/volume?apikey={apikey}&orderId={orderId}&&litre={volume}
Параметр | Описание |
---|---|
Обязательный apikey |
Строка Ключ авторизации |
Обязательный orderId |
Строка Идентификатор заказа |
Обязательный volume |
Число Количество фактически налитых литров |
Ответ
Ответ партнёра не учитывается при обработке запроса.
Запрос для уведомления партнёра при изменении состояния заказа в ходе его обработки - при фактическом успешном наливе или отмене заказа.
Запрос
(POST) URL_PS + /order/?apikey={apikey}
Параметр | Описание |
---|---|
Обязательный apikey |
Строка Ключ авторизации |
Ответ
Content type: application/json
{
"Id":(string),
"Status":(string),
"UserId":(string),
"DateCreate":(string),
"DateEnd":(string),
"OrderType":(string),
"OrderVolume":(string),
"StationId":(string),
"ColumnId":(int),
"FuelId":(string),
"FuelMarka":(string),
"PriceFuel":(double),
"Sum":(double),
"Litre":(double),
"SumPaidCard":(double),
"SumPaid":(double),
"LitreCompleted":(double),
"SumPaidCardCompleted":(double),
"SumPaidCompleted":(double),
"ReasonId":(string),
"Reason":(string),
"Receipt":(string)
}
Описание параметров