# СБП
Сервис оплаты при помощи QR-кода на сайте мерчанта
![Бизнес процесс](https://emoney-tools-docs-public.hb.kz-ast.vkcs.cloud/flow.jpg)
# Authorization
Авторизация для создания платежной страницы
```shell
curl --request GET \ --url https://api.sbp.emoney.tools/core/v1/auth \ --header 'Authorization: Basic base64(m_id:secret)'
```
Успешный ответ:
```
{
"user_id": 2,
"token": "eyJhbGciOiJIUzI1NiJ9"
}
```
user_id - id мерчанта,
token - зашифрованный токен
Возможные ошибки:
Если мерчант не авторизован:
```json
{
"errorCode": 4005,
"name": "UNAUTHORIZED",
"description": "User is not registered"
}
```
# Create Payment
Создание страницы платежа(Qr) на сайте мерчанта для физического лица.
Пример запроса на CURL
```shell
curl --request POST \
--url http://api.sbp.emoney.tools/core/v1/payment \
--header 'Authorization: Bearer ***' \
--header 'Content-Type: application/json' \
--data '{
"order_id": "150",
"payment_purpose": "Тестовый платеж",
"amount": 1000,
"redirect_url": "https://www.mtsbank.ru/",
"expiration_date": 1,
"callback_url": "dsjkfnjhvbfj"
}'
```
## Данные
| Параметр | Значение| Обязательное|Тип |Описание|
|:-------------|:---------------|:---------------|:---------------:|:-------------|
| order_id| 150| Нет |string |Айди платежа мерчанта|
| payment_purpose| Тестовый платеж | Да |string |Цель и описание платежа физического лица|
| amount| 1000| Да |int |Сумма транзакции, в копейках |
|redirect_url|https://qr.nspk.ru/BD100016LEQESRF99U1BT85N87PBGI8L?type=02&bank=100000000017&sum=100&cur=RUB&crc=249A |Да|string |Ссылка для оплаты|
| expiration_date| 1 | Да|int | Срок ссылки для оплаты (в минутах) |
| callback_url| dsjkfnjhvbfj | Нет| string | Урл мерчанта для колбека|
Успешный ответ:
```json
{
"id": 7,
"created_at": "2023-10-31T06:46:29.550462Z",
"amount": 1000,
"payment_purpose": "Тестовый платеж",
"expiration_date": 5,
"redirect_url": "https://qr.nspk.ru/AD10005FOC6DLQ568KD9T3F8MHTMJMC9?type=02&bank=100000000017&sum=1000&cur=RUB&crc=F34C",
"status_code": 400
}
```
## Данные
| Параметр | Значение| Тип |Описание|
|:-------------|:---------------|:---------------:|:-------------|
| id| 7 | int |id платежа|
| created_at|2023-10-11T11:32:43.585359744Z| string |Дата и время создания платежа|
| amount| 1000 | int |Сумма платежа|
| payment_purpose| Тестовый платеж |string |Цель и описание платежа физического лица|
| expiration_date| 5 | int | Срок ссылки для оплаты (в минутах) |
|redirect_url|https://qr.nspk.ru/BD100016LEQESRF99U1BT85N87PBGI8L?type=02&bank=100000000017&sum=100&cur=RUB&crc=249A |string |Ссылка для оплаты|
|status_code| 100 | int |Код статуса платежа|
Возможные ошибки:
1) При истечении времени токена или токен неверный:
```json
{
"message": "Forbidden"
}
```
2) Платеж не найден или айди платежа неверное
```json
{
"errorCode": 4007,
"name": "NOT_FOUND",
"description": "Payment not found"
}
```
# Get Payment Status
Запрос статуса платежа по транзакции.
Пример запроса на CURL
```shell
curl --request GET \ --url'http://api.sbp.emoney.tools/core/v1/payment?id=7' \ --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9'
```
Успешный ответ:
```json
{
"id": 7,
"created_at": "2023-10-11T11:32:43.58536Z",
"amount": 1000,
"payment_purpose": "Тестовый платеж",
"expiration_date": 50,
"redirect_url": "https://qr.nspk.ru/AD10004JGN3P2PT98AHOU69VMOO0RIL4?type=02&bank=100000000017&sum=500000&cur=RUB&crc=C232",
"status_code": 100
}
```
## Данные
| Параметр | Значение| Тип |Описание|
|:-------------|:---------------|:---------------:|:-------------|
| id| 7 | int |id транзакции|
| created_at|2023-10-11T11:32:43.585359744Z| string |Дата и время создания транзакции|
| amount| 500000| int |Сумма транзакции |
| payment_purpose| Тестовый платеж | string |Цель платежа физического лица|
| expiration_date| 5 | int | Срок ссылки для оплаты (в минутах) |
|payment_method | 2 | int |Метод платежа |
|redirect_url|https://qr.nspk.ru/BD100016LEQESRF99U1BT85N87PBGI8L?type=02&bank=100000000017&sum=100&cur=RUB&crc=249A |string |Ссылка для оплаты|
|status_code| 100 |int |Код статуса платежа|
Возможные ошибки, id платежа неверный или не существует
```json
{
"error": "NullPointerException"
}
```
# Get Last 100 Payments
Запрос статусов по 100 последним платежам(Реестр)
Пример запроса на CURL
```shell
curl --request GET \ --url'http://api.sbp.emoney.tools/core/v1/payment' \ --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9'
```
Успешный ответ:
```json
{
"id": 7,
"created_at": "2023-10-11T11:32:43.58536Z",
"amount": 1000,
"payment_purpose": "Тестовый платеж",
"expiration_date": 50,
"redirect_url": "https://qr.nspk.ru/AD10004JGN3P2PT98AHOU69VMOO0RIL4?type=02&bank=100000000017&sum=500000&cur=RUB&crc=C232",
"status_code": 100
},
{
"id": 128976,
"created_at": "2023-10-18T10:53:37.727728Z",
"amount": 500,
"payment_purpose": "Тестовый платеж",
"expiration_date": 50,
"redirect_url": "https://qr.nspk.ru/BD100054E42AJNJE8S2P4AJ0R1F215F9?type=02&bank=100000000017&sum=500&cur=RUB&crc=8F42",
"status_code": 600
-/-/-/-/- 98 айди платежей и их статусы
}
```
## Данные
| Параметр | Значение| Тип |Описание|
|:-------------|:---------------|:---------------:|:-------------|
| id| 7 | int |id транзакции|
| created_at|2023-10-11T11:32:43.585359744Z| string |Дата и время создания транзакции|
| amount| 1000| int |Сумма транзакции |
| payment_purpose| Тестовый платеж | string |Цель платежа физического лица|
| expiration_date| 5 | int | Срок ссылки для оплаты (в минутах) |
|payment_method | 2 | int |Метод платежа |
|redirect_url|https://qr.nspk.ru/BD100016LEQESRF99U1BT85N87PBGI8L?type=02&bank=100000000017&sum=100&cur=RUB&crc=249A |string |Ссылка для оплаты|
|status_code| 100 |int |Код статуса платежа|
Возможные ошибки, время токена истекло или токен неверный
```json
{
"message": "Forbidden"
}
```
#### Коды и статусы транзакции:
| Параметр | Значение| Описание|Категория статуса|
|:-------------|:---------------|:-------------|:-------------|
| 400 | Final status - Fail|Не успех/Отказ|Финальный|
| 600 |Final status - Success|Успешной завершение операции|Финальный|
| Any other statuses | In progress|Ожидание|Информационный|
#### Коды ошибок, НЕ являются статусами транзакций
|error_code|name|description |Описание |
|:-------------|:---------------|:-------------|:-------------|
| 4000|SUCCESS |Success | Успех |
| 4001|BAD_REQUEST |Query parameter not set correctly |Параметр запроса установлен неправильно|
| 4002|PAYMENT_ERROR |Payment failed | Платеж не прошел|
| 4003|NOT_FOUND |No terminal found for MID |Терминал проекта не найден |
| 4004|NOT_FOUND |Terminal not found |Терминал не найден |
| 4005|UNAUTHORIZED |User is not registered |Пользователь не зарегистрирован|
| 4006|INSERT_ERROR |Error when saving data to database |Ошибка при сохранении данных в базу данных|
| 4007|NOT_FOUND |Payment not found |Платеж не найден |
| 4008|FORBIDDEN |Problems saving data |Проблемы с сохранением данных |
| 4009|FORBIDDEN |Out of limits | Лимит на транзакцию превышен|
| 4011|PRECONDITION FAILED|Payment amount precondition failed |Не удалось выполнить предварительное условие суммы платежа|
| 4012|ACCESS_DENIED |The user does not have the necessary access rights to retrieve this payment |Пользователь не имеет необходимых прав доступа для получения этого платежа|
| 4013|NOT_FOUND |Merchant terminal not found |Терминал мерчанта не найден|
#### Коды причин отказа
|error_code|name|описание |
|:-------------|:---------------|:-------------|
| 0|NO_ERRORS |нет ошибок |
| 10|PAYMENT_CREATION_ERROR | Параметр запроса установлен неправильно|
| 20|IGNORED_BY_PAYER |Клиентом(физ. лицом) брошена страница оплаты |
| 30|REJECTED_BY_NSPK |Отказ от НСПК |
| 40|REJECTED_BY_GATEWAY | Отказ шлюза |