Сервис предназначен для реализации прямого списания денежных средств кредитором с организации, являющейся заемщиком по заранее выданному долгосрочному согласию.
Термины и определения
Согласие - сущность, которую должен создать в сервисе Партнер, чтобы зарегистрировать выданный займ и зафиксировать реквизиты Партнера, на которые возможен возврат займа.
Оферта - Перечень действий, которые Клиент разрешает выполнять приложению Партнера. Оферта создается при подписании Клиентом длительного поручения Банку в момент начала работы с Партнером.
Счет займа - (в контексте данного сервиса) счет заемщика, на который был зачислен займ.
Платежное поручение (ПП) - платежный документ, создаваемый Банком в момент вызова Партнером сервиса списания денежных средств, на основании длительного поручения Клиента, зафиксированного в Оферте.
Есть некоторые условия работы Партнера с данным сервисом
- в назначении кредитного транша должен присутствовать 'service Id: transactionId', где transactionId - уникальный идентификатор, присваиваемый траншу Партнером;
- в оферте Партнеру должно быть выдано разрешение на списание средств заемщика и на получение статуса платежного поручения.
TLS ГОСТ Промышленный режим
TLS ГОСТ Режим разработки
TLS RSA
Paths
/open-banking/v1.1/loan/standingOrder/consents
Метод создания долгосрочного согласия на прямое списание средств с организации .
Метод postLoanConsent предназначен для создания долгосрочного согласия на списание средств организации.
Алгоритм работы метода
После получения запроса, валидируются входные параметры запроса. Описание форматов входных параметров и ошибок представлено ниже. В случае успешной валидации, осуществляются следующие проверки:
- проверяется, что счета Партнера в consent.accountsTo являются его банковскими счетами,
- проверка является ли авторизованный пользователь руководителем организации (ЕИО) или владельцем выбранного ИП,
- наличие у Партнера актуальной подписанной оферты от организации и разрешения на действия по списанию средств в ней,
- по параметрам date, accountTo запрашивается выписка и проверяется существование кредитного транша с идентификатором transactionId в назначении, в рамках которого Партнер запрашивает списание. Транзакция должна быть рублевой и на нее не должно быть создано согласие.
В случае успеха создается согласие, а Клиенту формируется и направляется 201 Created.
Стандартный заголовок HTTP. Представляет формат полезной нагрузки в запросе. Допустимый тип - application/json.
Стандартный HTTP заголовок, определяющий тип контента, который требуется от сервера. Допустимый тип - application/json.
Тело запроса на создание согласия
IP адрес пользователя.
{
"pattern": "\/((^\\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\\s*$)|(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$))\/"
}
RFC4122 UID, используемый в качестве идентификатора корреляции.
Заголовок передается в формате "Bearer token", где token - это access token, полученный на сервере авторизации.
Согласие на списание средств успешно создано.
Неверные входные параметры тела запроса или заголовок. Возможные кейсы:
Кейс | Errors/ErrorCode | Errors/Message |
---|---|---|
Некорректный формат заголовка | RU.ALFB.Header.IncorrectFormat | Некорректный формат заголовка {наименование заголовка}: {уточнение ошибки} |
Отсутствие обязательного заголовка | RU.ALFB.Header.Missing | Не заполнен заголовок {наименование заголовка} |
Тело запроса не соответствует JSON | RU.ALFB.Body.IncorrectFormat | Тело запроса не соответствует JSON |
Пустое тело запроса | RU.ALFB.Body.Missing | Пустое тело запроса |
Некорректный параметр тела запроса | RU.ALFB.Field.IncorrectFormat | Некорректный формат параметра тела запроса: {наименование параметра}: {уточнение} |
Отсутствие обязательного параметра в теле запроса | RU.ALFB.Field.Missing | Отсутствует обязательный параметр тела запроса {наименование параметра} |
В рамках транзакции займа совершен не рублевый перевод. | RU.ALFB.Business.NonRubleCreditTransaction | Кредитный транш должен быть выполнен в рублевой валюте |
Для указанной транзакции уже оформлено согласие. | RU.ALFB.Business.ConsentAlredyExists | Для указанной транзакции уже зарегистрировано согласие |
Не найдена актуальная подписанная оферта | RU.ALFB.Business.OffertNotFound | Не найдена актуальная оферта |
Кейс | Errors/ErrorCode | Errors/Message |
---|---|---|
Авторизованное уполномоченное лицо не является руководителем авторизованной организации-заемщика | RU.ALFB.User.Forbidden | Недостаточно прав на доступ УЛ к методу (не является ЕИО организации или владельцем ИП) |
В найденой оферте отсутствуют разрешения на действия, связанные со списанием средств | RU.ALFB.Organization.Forbidden | В актуальной оферте отсутствуют права на доступ Партнера к методу |
У уполномоченного лица организации недостаточно прав на получение выписки, невозможно проверить наличие транша | RU.ALFB.Statement.Forbidden | У пользователя отсутствуют права доступа на получение выписки |
Кейс | Errors/ErrorCode | Errors/Message |
---|---|---|
Один из счетов кредитора не является его банковским счетом | RU.ALFB.CreditorAccount.NotAvailable | Счет со значением {ошибочное значение} не существует или не является счетом Партнера в банке |
При получении выписки получили ошибку о том, что у пользователя нет доступа к счету (он не существует или не доступен) | RU.ALFB.DebtorAccount.NotAvailable | Счет со значением {ошибочное значение} не существует или не доступен для организации |
Не найдена транзакция займа в выписке организации | RU.ALFB.Transaction.NotFound | Не найден кредитный транш для ЮЛ по переданному идентификатору, дате и номеру счета |
Значение заголовка Accept не является application/json и не поддерживается.
Неверное значение заголовка Content-type или в теле запроса передан не JSON.
Внутренняя ошибка сервиса при выполнении обработки запроса.
Кейс | Errors/ErrorCode | OErrors/Message |
---|---|---|
Внутренняя ошибка сервиса при выполнении обработки запроса. | RU.ALFB.Service.InternalError | Внутренняя ошибка сервиса при обработке запроса |
Версия сервиса устарела и больше не поддерживается.
/open-banking/v1.1/loan/standingOrder/consents/{consentId}/paymentOrders/{paymentOrderId}
Метод создания платежного поручения на списание средств по долгосрочному согласию организации.
Метод postLoanPayment предназначен для создания платежного поручения на списание средств организации.
Алгоритм работы метода
После получения запроса, валидируются входные параметры запроса. Описание форматов входных параметров и ошибок представлено ниже. В случае успешной валидации, осуществляются следующие проверки:
- наличие платежа и согласия по идентификаторам consentId и paymentOrderId
- является ли авторизованный пользователь руководителем организации (ЕИО) или владельцем выбранного ИП,
- наличие счета зачисления (accountTo) в согласии,
- наличие у Партнера актуальной подписанной оферты от организации, разрешения на действия по списанию средств со счета списания (accountFrom) в ней,
В случае успеха создается платежное поручение,а Клиенту формируется и направляется 201 Created.
Идентификатор платежа
Идентификатор согласия
Стандартный HTTP заголовок, определяющий тип контента, который требуется от сервера. Допустимый тип - application/json.
Тело запроса на создание платежного поручения
RFC4122 UID, используемый в качестве идентификатора корреляции.
Заголовок передается в формате "Bearer token", где token - это access token, полученный на сервере авторизации.
Успешный результат. Возвращаются данные платежного поручения.
Неверные входные параметры тела запроса или заголовок. Возможные кейсы:
Кейс | Errors/ErrorCode | Errors/Message |
---|---|---|
Некорректный формат заголовка | RU.ALFB.Header.IncorrectFormat | Некорректный формат заголовка {наименование заголовка}: {уточнение ошибки} |
Отсутствие обязательного заголовка | RU.ALFB.Header.Missing | Не заполнен заголовок {наименование заголовка} |
Тело запроса не соответствует JSON | RU.ALFB.Body.IncorrectFormat | Тело запроса не соответствует JSON |
Пустое тело запроса | RU.ALFB.Body.Missing | Пустое тело запроса |
Некорректный параметр тела запроса | RU.ALFB.Field.IncorrectFormat | Некорректный формат параметра тела запроса: {наименование параметра}: {уточнение} |
Отсутствие обязательного параметра в теле запроса | RU.ALFB.Field.Missing | Отсутствует обязательный параметр тела запроса {наименование параметра} |
Организация не является ЮЛ или ИП | RU.ALFB.Business.IncorrectClientType | Клиент не является юридическим лицом или ИП |
В сервисе уже существует платеж с переданным во входных параметрах идентификатором согласия и платежа. | RU.ALFB.Business.PaymentAlreadyExists | Платеж с идентификатором {paymentOrderId} в рамках согласия {ConsentId} уже существует |
Не найдена актуальная оферта | RU.ALFB.Business.OffertNotFound | Не найдена актуальная оферта |
Операция недоступна для счета списания | RU.ALFB.Business.DebitForbidden | Операция по счету accountFrom {номер счета} недоступна |
Операция недоступна для счета зачисления | RU.ALFB.Business.CreditForbidden | Операция по счету accountFrom {номер счета} недоступна |
Кейс | Errors/ErrorCode | Errors/Message |
---|---|---|
Счет зачисления не найден в ранее созданном согласии (consent) | RU.ALFB.Account.Forbidden | Счет зачисления отсутствует в согласии с идентификатором {consentId} |
У Партнера нет доступа к счету зачисления | RU.ALFB.Account.Forbidden | Счет зачисления недоступен для Партнера |
Авторизованное уполномоченное лицо не является ЕИО или владельцем ИП организации заемщика | RU.ALFB.User.Forbidden | Недостаточно прав на доступ УЛ к методу (не является ЕИО организации или владельцем ИП) |
У организации нет доступа к счету списания | RU.ALFB.Account.Forbidden | Счет списания недоступен для организации |
Проведение операции запрещено по результатам внутренних проверок | RU.ALFB.User.Forbidden | Проведение операции запрещено |
В найденой оферте отсутствуют разрешения на действия, связанные со списанием | RU.ALFB.Organization.Forbidden | В актуальной оферте отсутствуют права на доступ Партнера к методу |
В перечне авторизованных счетов в оферте отсутствует счет списания | RU.ALFB.Account.Forbidden | Счет списания не авторизован для действий по списанию средств в актуальной оферте |
Кейс | Errors/ErrorCode | Errors/Message |
---|---|---|
Не найдено согласие, в рамках которого осуществляется списание | RU.ALFB.Consent.NotFound | Согласие не найдено |
Значение заголовка Accept не является application/json и не поддерживается.
Внутренняя ошибка сервиса при выполнении обработки запроса.
Кейс | Errors/ErrorCode | OErrors/Message |
---|---|---|
Внутренняя ошибка сервиса при выполнении запроса | RU.ALFB.Service.InternalError | Внутренняя ошибка сервиса при обработке запроса |
Версия сервиса устарела и больше не поддерживается.
/open-banking/v1.1/loan/standingOrder/consents/{consentId}/paymentOrders/{paymentOrderId}/status
Метод запроса статуса платежного поручения.
Метод postLoanPayment предназначен для получения статуса платежного поручения.
Алгоритм работы метода
После получения запроса, валидируются входные параметры запроса. Описание форматов входных параметров и ошибок представлено ниже. В случае успешной валидации, осуществляются следующие проверки:
- наличие платежа по paymentOrderId
- является ли авторизованный пользователь руководителем организации (ЕИО) или владельцем выбранного ИП,
- наличие счета зачисления (accountTo) в согласии,
- наличие у Партнера актуальной подписанной оферты от организации, разрешения на запрос статуса платежного поручения и авторизованного счета списания запрашиваемого ПП в ней, В случае успеха Клиенту формируется и направляется 200 Ok и тело с данными о статусе платежного поручения.
Стандартный HTTP заголовок, определяющий тип контента, который требуется от сервера. Допустимый тип - application/json.
Идентификатор платежа
Идентификатор согласия
RFC4122 UID, используемый в качестве идентификатора корреляции.
Заголовок передается в формате "Bearer token", где token - это access token, полученный на сервере авторизации.
Успешный результат. Возвращается статус платежного поручения.
Неверные входные параметры URI или заголовка. Возможные кейсы:
Кейс | Errors/ErrorCode | Errors/Message |
---|---|---|
Некорректный формат заголовка | RU.ALFB.Header.IncorrectFormat | Некорректный формат заголовка {наименование заголовка}: {уточнение ошибки} |
Отсутствие обязательного заголовка | RU.ALFB.Header.Missing | Не заполнен заголовок {наименование заголовка} |
Отсутствие обязательного параметра URI (paymentOrederId) | RU.ALFB.URI.Missing | Отсутствует обязательный параметр URI: {наименование параметра} |
Некорректный формат параметра URI | RU.ALFB.URI.IncorrectFormat | 'Некорректный формат параметра URI {наименование параметра}: {уточнение}' |
Кейс | Errors/ErrorCode | Errors/Message |
---|---|---|
Авторизованное уполномоченное лицо не является ЕИО или владельцем ИП организации заемщика | RU.ALFB.User.Forbidden | Недостаточно прав на доступ УЛ к методу (не является ЕИО организации или владельцем ИП) |
Не найдена актуальная оферта или в актуальной оферте нет прав на операции списания средств | RU.ALFB.Organization.Forbidden | Не найдена актуальная оферта или права на доступ Партнера к методу для организации отсутствует в действительной оферте |
Кейс | Errors/ErrorCode | Errors/Message |
---|---|---|
Не найден запрашиваемый платеж | RU.ALFB.PaymentOrder.NotFound | Запрашиваемый платеж не найден |
Значение заголовка Accept не является application/json и не поддерживается.
Внутренняя ошибка сервиса при выполнении обработки запроса.
Кейс | Errors/ErrorCode | OErrors/Message |
---|---|---|
Внутренняя ошибка сервиса при выполнении обработки запроса. | RU.ALFB.Service.InternalError | Внутренняя ошибка сервиса при обработке запроса |
Версия сервиса устарела и больше не поддерживается.
Definitions
{
"type": "object",
"required": [
"transaction",
"consent"
],
"properties": {
"transaction": {
"type": "object",
"description": "Параметры транзакции займа",
"$ref": "#/definitions/Transaction"
},
"consent": {
"type": "object",
"description": "Дополнительные параметры для согласия",
"$ref": "#/definitions/Consent"
}
}
}
{
"type": "object",
"required": [
"transactionId",
"date",
"accountTo"
],
"properties": {
"transactionId": {
"type": "string",
"description": "Идентификатор транзакции, присваеваемый на стороне сервиса Партнера. Передается Партнером в поле \"Назначение платежа\".",
"example": "1200610MOCO#DS4004541",
"maxLength": 36
},
"date": {
"type": "string",
"description": "Дата совершения транзакции займа. Формат YYYY-MM-DD.",
"example": "2020-12-03"
},
"accountTo": {
"type": "string",
"maxLength": 20,
"minLength": 20,
"pattern": "[0-9]+",
"description": "Номер счета организации, которой были переведены средства по займу.",
"example": "40702810401300001316"
}
}
}
{
"type": "object",
"required": [
"accountsTo"
],
"properties": {
"accountsTo": {
"type": "array",
"description": "Номера счетов кредитора, на которые требуется оформить согласие. Далее на эти номера смогут быть перечислены средства заемщика.",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 20,
"pattern": "[0-9]+",
"example": "40702810401300001316"
}
}
}
}
{
"type": "object",
"required": [
"consentId",
"creationDateTime"
],
"properties": {
"consentId": {
"type": "string",
"description": "Идентификатор согласия, сгенерированный на стороне сервиса",
"format": "uuid",
"example": "f8afcd30-1d22-11eb-adc1-0242ac120002"
},
"creationDateTime": {
"type": "string",
"description": "Дата и время создания согласия. Формат YYYY-MM-DD.Thh:mm:ss±hh:mm.",
"example": "2020-12-03T10:15:30+03:00"
}
}
}
{
"type": "object",
"required": [
"amount",
"accountFrom",
"accountTo",
"purpose"
],
"properties": {
"amount": {
"type": "string",
"description": "Сумма списания, строго больше 0. Формат дробный, разделитель точка, не более двух знаков после разделителя.",
"format": "double",
"example": "5,5"
},
"accountFrom": {
"type": "string",
"description": "20-значный номер счета отправителя (заемщика)",
"maxLength": 20,
"minLength": 20,
"pattern": "[0-9]+",
"example": "40702810401300001316"
},
"accountTo": {
"type": "string",
"description": "20-значный номер счета получателя (кредитора)",
"maxLength": 20,
"minLength": 20,
"pattern": "[0-9]+",
"example": "40702810401300001316"
},
"purpose": {
"type": "string",
"description": "Назначение платежа. Не должно быть пустым, null или содержать пробелы.",
"maxLength": 210,
"example": "Оплата по счёту № 81 от 28.02.2019. В том числе НДС (20%), 8 905.57 руб."
}
}
}
{
"type": "object",
"required": [
"id",
"consentId"
],
"properties": {
"id": {
"type": "string",
"description": "Идентификатор платежного поручения, сгенерированный на стороне сервиса",
"format": "uuid",
"example": "ff9d005e-1d31-11eb-adc1-0242ac120002"
},
"consentId": {
"type": "string",
"description": "Идентификатор согласия",
"format": "uuid",
"example": "f8afcd30-1d22-11eb-adc1-0242ac120002"
},
"date": {
"type": "string",
"description": "Дата и время создания записи о платеже. Формат - YYYY-MM-DDThh:mm:ss±hh:mm.",
"example": "2020-12-12T18:31:42+03:30"
},
"amount": {
"type": "number",
"description": "Сумма списания (7)",
"format": "double",
"example": "5,5"
},
"currency": {
"type": "string",
"description": "Валюта",
"pattern": "^[A-Z]{3,3}$",
"example": "RUR"
}
}
}
{
"type": "object",
"required": [
"Code",
"Message",
"Errors"
],
"properties": {
"Code": {
"type": "string",
"maxLength": 40,
"description": "Высокоуровневый текстовый код ошибки, необходимый для классификации"
},
"Id": {
"type": "string",
"maxLength": 40,
"description": "Уникальный идентификатор ошибки, для целей аудита, в случае неизвестных / не классифицированных ошибок."
},
"Message": {
"type": "string",
"maxLength": 500,
"description": "Краткое сообщение об ошибке. Например, «что-то не так с предоставленными параметрами запроса»."
},
"Errors": {
"type": "array",
"items": {
"$ref": "#/definitions/OBRUError"
}
}
}
}
{
"type": "object",
"required": [
"ErrorCode",
"Message"
],
"properties": {
"ErrorCode": {
"type": "string",
"description": "Низкоуровневое текстовое описание ошибки."
},
"Message": {
"type": "string",
"maxLength": 500,
"description": "Описание ошибки."
},
"Path": {
"type": "string",
"maxLength": 500,
"description": "Путь к элементу с ошибкой в JSON объекте."
},
"Url": {
"type": "string",
"description": "URL для помощи в устранении проблемы, Также через URL можно предоставлять дополнительную информацию."
}
}
}
{
"type": "object",
"required": [
"status",
"description"
],
"properties": {
"status": {
"type": "string",
"description": "Статус платежного поручения.:\n * 'JWF' - Обработка внутрифилиального ПД завершена. Финальный статус. \n * 'G27' - Сквитован-списан по квитанции. Финальный статус. \n * 'G21' - Списан-сквитован. Финальный статус. \n * 'L24' - ОМФО отправлен – текущая ДПП. Финальный статус. \n * 'F22' - Списан. Финальный статус. \n * 'G26' - Списан-сквитован. Финальный статус. \n * 'G23' - Списан-сквитован. Финальный статус. \n * 'LL5' - Списан-сквитован. Финальный статус. \n * 'L12' - Отвергнут. Финальный статус. \n * 'H42' - Отменен. Финальный статус. \n * 'H11' - На полн.контроль правильности ввода\n * 'H12' - На крат.контроль правильности ввода\n * 'H52' - Помещен в дневную очередь\n * 'С20' - На антифрод-контроль\n",
"enum": [
"JWF",
"G27",
"G21",
"L24",
"F22",
"G26",
"G23",
"LL5",
"L12",
"H42",
"H11",
"H12",
"H52",
"С20"
]
},
"description": {
"type": "string",
"description": "Человекочитаемое описание статуса платежного поручения."
},
"rejectionReason": {
"type": "string",
"description": "Причина отклонения платежного документа. Передается в случае, если платеж отклонен."
}
}
}