Інтеграція з сайтами контрагентів для розрахунку кредитного ліміту позичальника та створення заявки на кредит
Основні поняття
Контрагент
Юридична особа або ФОП, яка укладає договір з ТОВ «НоваПей Кредит» для надання послуг кредитування фізичних осіб через свій веб-сайт або мобільний додаток.
Позичальник
Фізична особа, яка оформлює кредит у ТОВ «НоваПей Кредит» для оплати товарів чи послуг, запропонованих на веб-сайті або в мобільному додатку контрагента, і зобов’язується повернути отримані кошти відповідно до умов кредитного договору.
ТОВ «НоваПей Кредит»
Надає кредит позичальнику. Є частиною фінансової групи NovaPay і входить до великої родини NOVA. Компанія має всі необхідні ліцензії та дозволи НБУ.
Зміст
- 1 Послідовність дій оформлення кредиту через кол-центр контрагента
- 2 Послідовність дій оформлення кредиту через веб-сайт/мобільний додаток контрагента без кол-центру.
- 3 Дані для відправки в NovaPay для прорахунку ліміту або холдуванню коштів
- 4 API Gateway Access token
- 5 Отримання токену та перевірка можливості розрахунку ліміту
- 6 Розрахунок суми кредитного ліміту по клієнту
- 7 Холдування суми ліміту під замовлення
- 8 Приклади помилок і причини
- 9 Callback при оформленні замовлення в кредит
- 10 Публічний ключ для перевірки підпису
- 11 Приклад генерації підпису
- 12 Довідники
Послідовність дій оформлення кредиту через кол-центр контрагента
Позичальник на веб-сайті або в мобільному додатку контрагента залишає заявку на покупку товару в кредит, вказуючи ПІБ, номер телефону та ІПН.
Кол-центр контрагента зв'язується з позичальником для уточнення деталей, розрахунку кредитного ліміту та створення заявки на кредит.
Кол-центр контрагента отримує від позичальника згоду на розрахунок кредитного ліміту та необхідні дані для скорингу. Далі контрагент надсилає запит на отримання токена за допомогою API-запиту
/credits/auth.NovaPay передає токен контрагенту та надсилає позичальнику OTP-пароль для підтвердження скорингу. OTP-пароль дійсний протягом 5 хвилин.
Кол-центр контрагента запитує OTP-пароль у позичальника.
Кол-центр контрагента вводить OTP-пароль і підтверджує намір позичальника пройти скоринг, надсилаючи API-запит
/credits/check-amount.NovaPay розраховує кредитний ліміт позичальника та надсилає контрагенту відповідь із погодженням і сумою ліміту.
Кол-центр контрагента консультує позичальника щодо доступного ліміту.
Кол-центр контрагента погоджує холдування ліміту на суму товару та надсилає API-запит
/credits/holdіз сумою товару та номером замовлення.NovaPay холдує суму ліміту під замовлення позичальника.
Контрагент відправляє товар позичальнику відповідно до зазначеного номера замовлення.
Позичальник отримує товар і завершує оформлення кредиту.
NovaPay надсилає контрагенту підтвердження статусу оформлення замовлення в кредит.
Послідовність дій оформлення кредиту через веб-сайт/мобільний додаток контрагента без кол-центру.
Позичальник на веб-сайті або у мобільному додатку контрагента обирає замовлення товару з оплатою в кредит від «Нова Пошта».
Позичальник заповнює всі необхідні для скорингу поля, зазначені на сайті, та підтверджує згоду на запит до БКІ.
Контрагент надсилає до NovaPay API-запит
/credits/auth.NovaPay передає токен контрагенту та надсилає позичальнику OTP-пароль для підтвердження скорингу. OTP-пароль дійсний протягом 5 хвилин.
Позичальник вводить OTP-пароль на веб-сайті або у мобільному додатку.
Контрагент надсилає до NovaPay API-запит
/credits/check-amount.NovaPay розраховує кредитний ліміт позичальника та надсилає контрагенту відповідь із погодженням і сумою ліміту.
Контрагент відображає на веб-сайті або у мобільному додатку доступну суму ліміту для позичальника.
Позичальник підтверджує оформлення замовлення в кредит.
Контрагент надсилає до NovaPay API-запит
/credits/hold, включаючи суму замовлення та номер замовлення.Контрагент відправляє товар позичальнику відповідно до зазначеного номера замовлення.
Позичальник отримує посилку та завершує оформлення кредиту.
NovaPay надсилає контрагенту підтвердження статусу оформлення замовлення в кредит.
Дані для відправки в NovaPay для прорахунку ліміту або холдуванню коштів
Назва поля | Назва в обміні | Формат | Обов’язковість | Приклад | |
|---|---|---|---|---|---|
| 1 | Номер телефону | phone | string | + | +380633627500 |
| 2 | ІПН | taxpayer_id | numeric | + | 3351212458 |
| 3 | Прізвище | last_name | string | + | Іванов |
| 4 | Ім’я | first_name | string | + | Іван |
| 5 | По батькові | patronymic | string | - | Іванович |
| 6 | Дата народження | birth_date | date | + | 1991-10-19 |
| 7 | Місце народження | birth_place | string | + | м.Київ |
| 8 | Тип документу | document_type | string | + | passport |
| 9 | Серія документу | document_series | string | -, у разі біометричного документу | НЕ |
| 10 | Номер документу | document_number | numeric | + | 532407 |
| 11 | Соціальний статус | social_status | string[] | + | ["employee"] |
| 12 | Сума доходу, міс | monthly_income | amount | + | 30000.00 |
| 13 | Номер замовлення | id | string | + | 10265896 |
| 14 | Сума замовлення для оформлення в креди | amount | amount | + | 30000.00 |
API Gateway Access token
http request header "x-access-token: <value>"
value - персональний токен, отриманий на момент інтеграції API
Отримання токену та перевірка можливості розрахунку ліміту
POST "/credits/auth"
Server-server request payload:
{
"taxpayer_id":"3351212458",
"phone":"+380633627500",
"last_name":"Іванов",
"first_name":"Іван",
"patronymic":"Іванович",
"birth_date":"1991-10-19",
"birth_place":"м.Київ",
"document_type":"passport",
"document_series":"НЕ",
"document_number":"123456",
"social_status":["emplyee"],
"monthly_income":"30000.00"
}Successful response:
Status code: 200
body: { "token" }Error response:
Status code:
400 for bad request
403 for unauthorized request
500 for internal error
body:
{
"uuid": "d05f0d5b-7fc2-4747-a8df-769e6cc070fd", - ідентифікатор помилки
"type": "processing",
"error": "кредитний API-токен не відповідає даним",
"code": "ContragentCreditApiTokenNotMatchError"
}
Розрахунок суми кредитного ліміту по клієнту
POST "/credits/check-amount"
Server-server request payload:
{
"token":"token",
"otp":"5555"
}Successful response:
Status code: 200
body: {
"amount" – сума ліміту
}Error response:
Status code:
400 for bad request
403 for unauthorized request
500 for internal error
body: {
"error": "",
"uuid" – ідентифікатор запиту
}Холдування суми ліміту під замовлення
POST "/credits/hold"
Server-server request payload:
{
"token":"token",
"id":"10265896",
"amount":"3000.00"
}Successful response:
Status code: 200
body:
{
"id": "07f46c4e-3f59-4da5-a2c3-319c0aa466c9", - id холду
"requested_amount": 100000, - запитувана сума
"amount": 5000 - сума холду
}Error response:
Status code:
400 for bad request
403 for unauthorized request
500 for internal error
body: {
"error": "",
"uuid" – ідентифікатор запиту
}Приклади помилок і причини
Помилка | Причина |
|---|---|
{
"uuid": "3949a650-203e-4726-b8ec-92734758be2d",
"type": "processing",
"error": "термін дії кредитного API-токена закінчився",
"code": "ContragentCreditApiTokenExpiredError"
} | термін дії токену закінчився |
{
"uuid": "50562a86-8a70-4997-a758-b80dc77231f5",
"type": "validation",
"errors": [
{
"keyword": "errorMessage",
"dataPath": "/phone",
"schemaPath": "#/properties/phone/allOf/1/errorMessage",
"params": {
"errors": [
{
"keyword": "validPhone",
"dataPath": "/phone",
"schemaPath": "#/properties/phone/allOf/1/validPhone",
"params": {
"keyword": "validPhone"
},
"message": "should pass \"validPhone\" keyword validation"
}
]
},
"message": "телефон не валiдний"
},
{
"keyword": "errorMessage",
"dataPath": "/taxpayer_id",
"schemaPath": "#/properties/taxpayer_id/errorMessage",
"params": {
"errors": [
{
"keyword": "validTaxpayerId",
"dataPath": "/taxpayer_id",
"schemaPath": "#/properties/taxpayer_id/validTaxpayerId",
"params": {
"keyword": "validTaxpayerId"
},
"message": "should pass \"validTaxpayerId\" keyword validation"
}
]
},
"message": "Невірний номер РНОКПП (ІПН"
}
]
} | валідація на окремі поля |
{
"uuid": "89545844-1a2e-4fbc-94cf-2529bb8a6a54",
"type": "processing",
"error": "кредитний токен використанний",
"code": "ContragentCreditApiTokenUsedError"
} | токен вже використовувався для оформлення холду |
{
"uuid": "c836ffc5-9be6-425c-a81d-c9ca069ce83d",
"type": "processing",
"error": "Можливість оформити посилку в кредит відсутня.",
"code": "CreditNotAvailableError"
} | відмова у кредиті |
{
"uuid": "bf5700ce-800a-42b7-a276-0a7eb58cde81",
"type": "processing",
"error": "введено невiрний OTP-пароль",
"code": "OTPCheckFailedError"
} | невiрний OTP-пароль |
{
"uuid": "460e7f9c-835d-4e88-9ffd-56c2cb1aa53b",
"type": "processing",
"error": "необхiдно пiдтвердити операцiю за допомогою OTP паролю",
"code": "OTPCheckRequiredError"
} | непідтверджений OTP-пароль |
Callback при оформленні замовлення в кредит
POST (Контрагент надає посилання для callback)
При успішному оформленні кредиту надсилається HTTP POST запит на надану адресу наступного виду:
POST / HTTP/1.1
Connection: close
Accept: application/json
Content-Type: application/json
X-Sign: rXWBZI5bHvFtRt/scwBRaywiz46hfWr7ZI6LtZsdoG5T5pQjoXTdGdyq2uffu27pIvEAfyRw7widv4O2LsJwmg==
{"id":"your-id","amount":20000,"status":"confirmed"}Публічний ключ для перевірки підпису
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Mowsvdp9Gu7SVQodTfT
y6G/TGpMHfR5bKAtoVyyxgbovSA+3CIzCjeQJdyN7NXw3M86DxtRVG0q/0Z9gL12
JAk7L48vQ690Q248cj2GrFR/oNXHllBPZM7rK4XLZyt1EVFWOtiopElJsogzp249
/Zz/nqxdKGxpbysj7NDkjg4QxafzXPIH5Pf/J8Yo8+z8jjIbVTYmuuCzrjh6yBj5
eqHRd3JuszvDwmbFQU67gwOPrnJsMp9uQyvJXL8toIhROJKDPq5LXk2Y8wNInzOb
OUdwEyo8s3kyCx7UteR1dXFFYXIIbzVsaED7dkSufAop7fok/s+sfXyK/vRFOJOF
JQIDAQAB
-----END PUBLIC KEY-----Приклад генерації підпису
Приватний ключ:
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6zxqlVzz0wy2j4kQVUC4Z
RZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQJAL151ZeMKHEU2c1qdRKS9
sTxCcc2pVwoAGVzRccNX16tfmCf8FjxuM3WmLdsPxYoHrwb1LFNxiNk1MXrxjH3R
6QIhAPB7edmcjH4bhMaJBztcbNE1VRCEi/bisAwiPPMq9/2nAiEA3lyc5+f6DEIJ
h1y6BWkdVULDSM+jpi1XiV/DevxuijMCIQCAEPGqHsF+4v7Jj+3HAgh9PU6otj2n
Y79nJtCYmvhoHwIgNDePaS4inApN7omp7WdXyhPZhBmulnGDYvEoGJN66d0CIHra
I2SvDkQ5CmrzkW5qPaE2oO7BSqAhRZxiYpZFb5CI
-----END RSA PRIVATE KEY-----Тестові дані:
{"id":"your-id","amount":20000,"status":"confirmed"}Результуючий підпис:
rXWBZI5bHvFtRt/scwBRaywiz46hfWr7ZI6LtZsdoG5T5pQjoXTdGdyq2uffu27pIvEAfyRw7widv4O2LsJwmg==Приклад з OpenSSL:
echo -n '{"id":"your-id","amount":20000,"status":"confirmed"}' | openssl dgst -sha1 -sign myprivate.pem | openssl enc -base64Довідники
Список можливих соціальних статусів позичальника:
employee - найманий працівник
private_entrepreneur - підприємець ФОП
attorney - власна справа, адвокат, нотаріус
unemployed - безробітний
pensioner - пенсіонер
student - студент
civil_servant - держслужбовець
serviceman - військовослужбовець
maternity_leave - декретна відпустка
Список можливих документів позичальника:
passport - паспорт громадянина України (книжка)
biometric_passport - біометричний паспорт громадянина України
international_passport - паспорт громадянина України для виїзду за кордон
Список статусів заявки на кредит:
confirmed - кредит видано
expired - холд скасовувано (автоматичне скасування заявки через 10 днів, якщо кредит не оформлено)