Операции с заявками
Описание эндпоинта для подачи заявки.
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.
Отправной точкой является формирование джоба, в котором хранится модель заявки. Формирование джоба происходит в трёх случаях: по заявке были выданы деньги; заявка сгорела по времени; заявка отменена провайдером.
Реализован механизм подписания запросов для последующей верификации получающей стороной.
Алгоритм генерации подписи:
- Захэшировать в sha256 конкатенацию api_key и secret;
- Захэшировать в 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.