Перейти к основному контенту

Операции с заявками

Описание эндпоинта для подачи заявки.

URI: /cash-out-request
Способ отправки: POST


Отправка смс осуществляется на стороне подающей заявку.

Генерация кода подтверждения также осуществляется на стороне подающей заявку.

Входные данные:
Заголовки:

  • Accept: "application/json"
  • Authorization: Bearer $token

Тело запроса:

{
"phoneNumber": "7473208572",
"backUrl": "http://kassa24-cashout-api/test",
"amountRequest": 100000,
"confirmCode": 123232232323,
"providerRequestID": "9NuwHtL52gtrmMUpcSS795PaPMGGUuPRCo"
}
Поле Описание
phoneNumber Номер телефона клиента
backUrl Бэкурл для отправки результата обработки заявки
amountRequest Сумма, которую нужно выдать по заявке
confirmCode 12-тизначный код подтверждения
providerRequestID Идентификатор заявки в системе у провайдера

Все параметры являются обязательными.

Ответ

  • При успешном сохранении данных в БД
HTTP_STATUS: 200
{
"statusCode": 200,
"message": "Cash out record created",
"data": {
"record": {
"PhoneNumber": "7473208572",
"ConfirmCode": 123232232323,
"BackURL": "http://kassa24-cashout-api/test",
"DateIn": 1588246102,
"DateExpire": 1588505302,
"IDProviders": 1,
"AmountRequest": 100000,
"RequestStatus": 1,
"ProviderRequestID": "9NuwHtL52gtrmMUpcSS795PaPMGGUuPRCo",
"IDCashOutRequest": 37,
"IDTerminalPayment": 129221
}
}
}
  • Если заявка с таким номером телефона и кодом в обработке существует
HTTP_STATUS: 400
{
"statusCode": 400,
"message": "Cash out request with given data already exist"
}
  • Если данные не прошли валидацию
HTTP_STATUS: 422
{
"statusCode": 422,
"messages": [
"Поле Номер телефона является обязательным",
"Поле Код подтверждения является обязательным",
"Поле backUrl является обязательным",
"Поле Сумма к выдаче является обязательным",
"Поле Идентификатор заявки в системе провайдера является обязательным"
]
}
  • Если превышена максимальная сумма по заявке
HTTP_STATUS: 400
{
"statusCode": 400,
"message": "amountRequest is too big. Max amountRequest is 250000"
}
  • Если кошелек клиента неидентифицирован
HTTP_STATUS: 400
{
"statusCode": 400,
"message": "Кошелек по данному номеру телефона не идентифицирован"
}

 

Описание эндпоинта для отмены заявки.

URI: /cash-out-request/cancel
Способ отправки: POST

Входные данные:
Заголовки:

  • Accept: "application/json"
  • Authorization: Bearer $token

Тело запроса:

{
"providerRequestID": "9NuwHtL52gtrmMUpcSS795PaPMGGUuPRCo"
"confirmCode": 123123123
}
Поле Описание
providerRequestID Идентификатор заявки в системе провайдера
confirmCode Код подтверждения из заявки

Все параметры являются обязательными.

Ответ

  • При успешной отмене
HTTP_STATUS: 200
{
"statusCode": 200,
"message": "Successfully cancelled",
}
  • Если заявки в обработке по такому идентификатору не существует
HTTP_STATUS: 404
{
"statusCode": 404,
"message": "Cash out request with given data not found"
}
  • Ошибка при обновлении статуса в базе
HTTP_STATUS: 500
{
"statusCode": 500,
"message": "Error on server"
}

 

Описание эндпоинта для получения информации по заявке.

URI: /cash-out-request/client/info
Способ отправки: POST

Входные данные:
Заголовки:

  • Accept: "application/json"
  • Authorization: Bearer $token

Тело запроса:

{
"providerRequestID": "1025",
"confirmCode": 506882332337
}
Поле Описание
provderRequestID Идентификатор заявки в системе провайдера
confirmCode Код подтверждения из заявки

Все параметры являются обязательными.

Ответ

  • Если заявка с таким набором данных найдена
HTTP_STATUS: 200
{
"statusCode": 200,
"data": {
"cashOutRecord": {
"IDCashOutRequest": 1193,
"ProviderRequestID": "1025",
"RequestStatus": "1",
"AmountRequest": "60000.0000",
"AmountOut": null,
"PhoneNumber": "7775247294",
"ConfirmCode": "506882332337",
"DateIn": 1592375120,
"DateOut": null,
"DateExpire": 1592634320
}
}
}
  • Если заявка не найдена
HTTP_STATUS: 404
{
"statusCode": 404,
"message": "Record not found"
}
  • Ошибка при запросе к БД
HTTP_STATUS: 500
{
"statusCode": 500,
"message": "Internal Server Error"
}
  • Ошибка при валидации
HTTP_STATUS: 422
{
"statusCode": 422,
"message": "Wrong data given. Validation is not passed."
}

Описание эндпоинта для переотправки СМС с кодом подтверждения.

Данный метод позволяет повторить отправку СМС-сообщения по переданному идентификатору заявки. После переотправки СМС устанавливается 5 минутный тайм-аут во время которого будет возвращаться информация об оставшемся времени до следующей переотправки.

URI: /admin/cash-out-request/resend-sms/{cashOutRequestID}
Способ отправки: POST

Входные данные:
Заголовки:

  • Accept: application/json
  • Authorization: Bearer $token

При условии, что СМС-сообщение переотправлено

HTTP_STATUS: 200
{
"statusCode": "200",
"message": "Успешно отправлено"
}

При условии, что передан cashOutRequestID несуществующей заявки

HTTP_STATUS: 400
{
"statusCode": "400",
"message": "Запись по указанному ID не найдена"
}

При попадании в тайм-аут

HTTP_STATUS: 400
{
"statusCode": "400",
"message": "Отправка СМС в данный момент невозможна. Осталось %d минут %d секунд"
}

 

Отправка данных на back url.

Отправной точкой является формирование джоба, в котором хранится модель заявки. Формирование джоба происходит в трёх случаях: по заявке были выданы деньги; заявка сгорела по времени; заявка отменена провайдером.

Реализован механизм подписания запросов для последующей верификации получающей стороной.

Алгоритм генерации подписи:

  1. Захэшировать в sha256 конкатенацию api_key и secret;
  2. Захэшировать в sha256 конкатенацию результата выполнения первого пункта и тела запроса захэшированного в md5.

Сама подпись находится в заголовках под ключом Sign.

При условии, что по заявке были выданы деньги

Формируется json вида:

{
"providerRequestID": "9NuwHtL52gtrmMUpcSS795PaPMGGUuPRCo",
"amountOut": 50000,
"status": 3,
"SNPayment": 123525232323
"terminalInfo": {
"IDTerminal": 1071,
"address": "Адрес",
"name": "Название терминала"
}
}

При условии что заявка сгорела

Формируется json вида:

{
"providerRequestID": "9NuwHtL52gtrmMUpcSS795PaPMGGUuPRCo",
"amountOut": 0,
"status": 2
}

При условии что заявка была отменена

Формируется json вида:

{
"providerRequestID": "9NuwHtL52gtrmMUpcSS795PaPMGGUuPRCo",
"amountOut": 0,
"status": 4
}
Поле Описание
providerRequestID Идентификатор заявки в системе у провайдера
amountOut Сумма, выданная по заявке
status Статус заявки в системе CashOut
terminalInfo Информация по терминалу выдавшему деньги
IDTerminal Идентификатор терминала
address Адрес терминала
name Название терминала
SNPayment Серийный номер платежа

Далее происходит отправка данных на back url, указанный в заявке.
В случае ошибки при отправке или получения некорректного статуса от провайдера джоб будет перезапускаться.
Ожидаемый HTTP статус в ответе от провайдера: 200.