API-Bonus Benzuber – протокол для обеспечения взаимодействия между учетной системой партнера (PS) и сервисом "Benzuber Bonus" (BZ).
Протокол позволяет реализовывать сценарии управления и обмен информацией о бонусной системе партнера в сервисе «BENZUBER» для решения бизнес-задач каждого участника.
Использование этого API доступно для бонусных систем партнёра расположенных в системе Benzuber. Т.е. пользователи, бонусный баланс и бонусные операции хранятся и обрабатываются в Benzuber.
Функционал API является дополнительной/альтернативной возможностью к "ручной" работе в личном кабинете "Бонусной системы партнёра" по управлению данными.
/api/v1/balance/get
/api/v1/clients/add/
/api/v1/clients/edit/
/api/v1/clients/remove/
/api/v1/clients/get/
/api/v1/clients/set/
/api/v1/clients/payments/get/
/api/v1/clients/payments/set/
/api/v1/orders/get/
Для обеспечения безопасного доступа и идентификации партнера для работы с протоколом предоставляются логин login и уникальный ключ apikey, которые используется для авторизации и "подписи" каждого запроса.
Базовый URL_BZ – адрес для обращения к серверу BZ. HTTP/HTTPS POST-запрос вида:
URL_BZ+/api/v1/команда?id={login}&crc={подпись}
Базовый URL_PS – адрес для обращения к партнеру. Для реализации запросов от Benzuber к партнеру. Все запросы выполняются HTTP/HTTPS POST-запросами вида:
URL_PS+/команда?id={login}&crc={подпись}
.
Запрос:
{
"параметр":"значение",
...
}
Ответ:
{
"параметр":"значение",
...
}
HTTP коды ответа на запросы:
200 – запрос выполнен успешно
404 – метод не найден
500 – ошибка выполнения запроса, некорректные параметры запроса
HTTP-код ответа при выполнении запросов означает только состояние получения (доставки) запроса, без учета анализа содержимого запроса. В случае успешного получения запроса сервером (статус 200), в ответе содержится параметр response, который определяет фактическое состояние обработки содержимого полученного запроса.
Возможные варианты response
Значение | Описание |
---|---|
success | Запрос успешно обработан. |
unauthorized | Неправильные логин/ключ/подпись. |
invalid_params | Неверные или отсутствующие параметры запроса |
not_found | не найден пользователь |
internal_error | Внутренняя ошибка сервера, необходимо выполнить запрос повторно. |
В случае response!=success, в ответе может быть представлен дополнительный параметр description с текстовым описанием ошибки.
Для обеспечения безопасности, достоверности и проверки целостности содержимого, во всех запросах, содержится обязательный параметр CRC (контрольной суммы), являющийся подписью запроса.
Пример:
apikey = "pass425"
тело запроса (json): {"client_id":"abcdefg","timestamp":"123545"}
1) $string = '{"client_id":"abcdefg","timestamp":"123545"}' //в строку
2) $string ='{"client_id":"abcdefg","timestamp":"123545"}pass425' //+apikey
3) sha1($string) = "d86624155c60bde94321a79ca69f4f2545adfb50"
Возможность получения актуального значения текущего общего баланса бонусной системы
Запрос
(POST) URL_BZ + /api/v1/balance/get
Request body schema application/json
{
"timestamp": (DateTime)
}
Ответ
Content type: application/json
{
"response": (string),
"balance": (string)
}
Параметр | Описание |
---|---|
Обязательный response |
Строка статус выполнения запроса |
Обязательный balance |
Строка Текущий баланс |
Для возможности использования бонусов пользователя в Benzuber, первично необходимо создать пользователя. Первичная идентификация пользователя происходит по сотовому номеру пользователя. Дальнейшие операции с пользователем по полученному идентификатору в системе Benzuber.
Запрос
(POST) URL_BZ + /api/v1/clients/add/
Request body schema application/json
{
"phone": (string),
"inn": (string),
"name": (string),
"is_enable": (boolean),
"percent": (string),
"maximum": (string),
"timestamp": (DateTime)
}
Описание параметров
Ответ
Content type: application/json
{
"response": (string),
"client_id": (string),
"description": (stri
}
Параметр | Описание |
---|---|
Обязательный response |
Строка статус выполнения запроса |
Обязательный client_id |
Строка Идентификатор пользователя в Benzuber |
Обязательный description |
Строка Расширенное описание ошибки |
Возможность изменения параметров использования бонусов пользователя.
Запрос
(POST) URL_BZ + /api/v1/clients/edit/
Request body schema application/json
{
"client_id": (string),
"phone": (string),
"inn": (string),
"name": (string),
"is_enable": (boolean),
"percent": (string),
"maximum": (string),
"timestamp": (DateTime)
}
Описание параметров
Ответ
Content type: application/json
{
"response": (string),
"description": (stri
}
Параметр | Описание |
---|---|
Обязательный response |
Строка статус выполнения запроса |
Обязательный description |
Строка Расширенное описание ошибки |
В случае необходимости запрета использования бонусов пользователем, необходимо удалить пользователя партнера из Benzuber
Запрос
(POST) URL_BZ + /api/v1/clients/remove/
Request body schema application/json
{
"client_id": (string),
"timestamp": (DateTime)
}
Параметр | Описание |
---|---|
Обязательный client_id |
Строка Идентификатор пользователя в Benzuber |
Обязательный timestamp |
ДатаВремя Отметка времени формирования запроса |
Ответ
Content type: application/json
{
"response": (string)
}
Параметр | Описание |
---|---|
Обязательный response |
Строка статус выполнения запроса |
С целью актуализации и синхронизации списка пользователей, которым предоставлено использование бонусов в Benzuber, можно получить текущий полный список добавленных пользователей. Либо запросить информацию по конкретному пользователю.
Запрос
(POST) URL_BZ + /api/v1/clients/get/
Request body schema application/json
{
"client_id": (String),
"timestamp": (DateTime)
}
Параметр | Описание |
---|---|
client_id | Строка Идентификатор пользователя в Benzuber, обязательный в случае запроса по одному пользователю |
Обязательный timestamp |
ДатаВремя Отметка времени формирования запроса |
Ответ
Content type: application/json
{
"response": (string),
"clients": (array)
}
Параметр | Описание |
---|---|
Обязательный response |
Строка статус выполнения запроса |
Обязательный clients |
Массив Значение присутствует в случае response = "success" Массив с идентификаторами пользователей партнера, каждый элемент запись о пользователе вида {"inn":"...", ..} где "client_id" - идентификатор пользователя в Benzuber "phone" - установленный телефон пользователя (физ.лицо) "inn" - ИНН организации (юр. лицо) "name" - имя пользователя "is_enable" - признак доступности бонусов для пользователя "percent" - установленный максимальный процент использования бонусов в заказе "maximum" - установленная максимальная сумма использования бонусов в заказе "balance" - Текущий бонусный баланс пользователя |
При необходимости можно передать полный список пользователей партнера, которым должно быть доступно использование бонусной системы партнера. Передаваемый список полностью заменяет ранее добавленных пользователей в Benzuber.
Запрос
(POST) URL_BZ + /api/v1/clients/set/
Request body schema application/json
{
"list": (array),
"timestamp": (DateTime)
}
Параметр | Описание |
---|---|
Обязательный list |
array Список пользователей. Каждый элемент массива запись вида: {"id":"....","phone":"...."} , где"phone" -сотовый номер пользователя (физ. лицо) "inn" - ИНН организации (юр. лицо) "name" - имя пользователя |
Обязательный timestamp |
ДатаВремя Отметка времени формирования запроса |
Ответ
Content type: application/json
{
"response": (string),
"description" : (string)
}
Параметр | Описание |
---|---|
Обязательный response |
Строка статус выполнения запроса |
Получение текущего баланса пользователя и списка операций начисления/списания бонусов
Запрос
(POST) URL_BZ + /api/v1/payments/get/
Request body schema application/json
{
"client_id": (string),
"timestamp": (DateTime)
}
Параметр | Описание |
---|---|
Обязательный client_id |
Строка Идентификатор пользователя в системе Benzuber |
Обязательный timestamp |
ДатаВремя Отметка времени формирования запроса |
Ответ
Content type: application/json
{
"response": (string),
"balance": (double),
"operations": (array)
}
Параметр | Описание |
---|---|
Обязательный response |
Строка статус выполнения запроса |
Обязательный balance |
Строка Общее количество бонусных баллов пользователя в системе Benzuber |
Обязательный percent |
Строка Процент от суммы заказа, которое доступно для оплаты бонусами |
Обязательный operations |
Строка Список бонусных операций пользователя. Каждый элемент массива запись вида {"id":"...", ... } где"id" - идентификатор операции "date" - дата операции "amount" - сумма операции. Положительное число - начисление, Отрицательное - списание "description" - описание операции |
Начисление и списание бонусных баллов на балансе пользователя.
Запрос
(POST) URL_BZ + /api/v1/clients/payments/set/
Request body schema application/json
{
"client_id": (String),
"amount": (string),
"description": (string),
"timestamp": (DateTime)
}
Параметр | Описание |
---|---|
Обязательный client_id |
Строка Идентификатор пользователя в Benzuber, в случае запроса по одному пользователю |
Обязательный amount |
Строка Сумма бонусов начисления или списания у пользователя (положительная - начисление, отрицательная - списание) |
Обязательный description |
Строка Описание операции |
Обязательный timestamp |
ДатаВремя Отметка времени формирования запроса |
Ответ
Content type: application/json
{
"response": (string),
"description": (string)
}
Параметр | Описание |
---|---|
Обязательный response |
Строка статус выполнения запроса |
Обязательный description |
Строка Значение присутствует в случае response!="success" Описание ошибки возникшее при выполнении запроса. |
Получение информации о топливных заказах в Benzuber, в которых была применена бонусная система партнера. Получение выборки, как по отдельным заказам, по конкретному пользователю и за период.
Запрос
(POST) URL_BZ + /api/v1/orders/get/
Request body schema application/json
{
"order_id": (string),
"client_id": (string),
"from": (DateTime),
"till": (DateTime),
"timestamp": (DateTime),
}
Описание параметров
Ответ
Content type: application/json
{
"response": (string),
"orders": (array)
}
Параметр | Описание |
---|---|
Обязательный response |
Строка статус выполнения запроса |
Обязательный orders |
Массив Значение присутствует в случае response = "success". Список заказов. Каждый элемент массива запись вида: {"client_id":"...", "order_id":"...", "invoice":"...", "amount":"...", "total":"...", "station":"...", "address":"...", "description":"..."} , где"client_id" - идентификатор клиента "order_id" - идентификатор заказа в Benzuber "invoice" - идентификатор записи списания бонусов у партнера "amount" - сумма использованных бонусов "total" - общая сумма заказа "station" - название АЗС "address" - адрес АЗС "description" - описание заказа |