Пром POST https://baas.alfabank.ru/api/jp/v2/payments
Песочница POST https://sandbox.alfabank.ru/api/jp/v2/payments
Scope
payment
Описание
Метод /v2/payments
позволяет Партнеру создавать платёжные поручения по собственным счетам или счетам клиента. Отправка денежных средств возможна только на счёт резидента РФ.
При необходимости проверки неизменности реквизитов получателя платежа до получения выписки по счёту, следует сравнить хэш реквизитов получателя (crucialFieldsHash), полученный при создании черновика платёжного поручения, с crucialFieldsHash полученным при запросе статуса этого документа. Для вычисления значения хэша ключевых полей формируется строка из реквизитов, соединенных между собой: БИК банка получателя, счёт получателя платежа, сумма платежа (разделитель-точка).
Параметры запроса
Bearer {access_token}, полученный по Authorization Code Flow / Authorization Code Flow H2H
application/json
application/json
Сумма платежа
Дата составления документа в формате YYYY-MM-DD
Вид платежа. Возможные значения: электронно
. Если не заполнено, то будет присвоено значение электронно
Уникальный идентификатор платежа
Показатель статуса налогоплательщика
Код бюджетной классификации
Код OKTMO
Показатель основания платежа
Налоговый период или код таможенного органа
Номер налогового документа
Дата налогового документа в формате YYYY-MM-DD
Тип налогового платежа
Значение электронной подписи, закодированное в Base64
Серийный номер сертификата, использованного при создании ЭП
Идентификатор документа, присвоенный партнером (UUID). Если в банке уже есть документ с указанным в запросе externalId
, то в ответе вернутся реквизиты ранее созданного платёжного поручения с кодом ответа 200 OK
Код вида дохода получателей выплаты по 229-ФЗ
Номер документа. Если поле не заполнено, то номер присваивается автоматически
Код операции. Возможные значения:
- •
01
- Платёжное поручение
Счёт получателя платежа
БИК банка получателя платежа
Корсчет банка получателя платежа
ИНН получателя платежа
КПП получателя платежа
Полное наименование получателя платежа
Счёт плательщика
БИК банка плательщика
Корсчет банка плательщика
ИНН плательщика
КПП плательщика
Полное наименование плательщика
Очерёдность платежа
Назначение платежа. Максимальное количество символов - 210.
При оформлении платежей в бюджет за третье лицо необходимо указать:
- •ИНН и КПП (при наличии) плательщика-владельца счета;
- •Наименование налогоплательщика, плательщика сборов, страховых взносов и иных платежей (третьего лица).
Для разделения информации об ИНН, КПП клиента и о налогоплательщике от иной информации, указываемой в реквизите, воспользуйтесь символами //
Код срочности. Возможные значения:
- •
OFFHOURS
- Продлённый операционный день; - •
BESP
- Срочный платёж; - •
NORMAL
- Стандартный операционный день
Сумма НДС
Ставка НДС. Возможные значения: 0
, 10
, 20
. Значение по умолчанию 0
Способ расчета НДС. Возможные значения:
- •
INCLUDED
- НДС включён в сумму платежа; - •
ONTOP
- НДС добавляется к сумме платежа; - •
NO_VAT
- Не облагается НДС; - •
MANUAL
- Ручной ввод НДС.
Значение по умолчанию NO_VAT
curl -X POST https://baas.alfabank.ru/api/jp/v2/payments \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}' \
-H 'Content-Type: application/json' \
-d '{
"amount": 1.01,
"date": "2018-12-31",
"deliveryKind": "электронно",
"departmentalInfo": {
"uip": "0",
"drawerStatus101": "01",
"kbk": "18210102010011000110",
"oktmo": "45902000",
"reasonCode106": "ТП",
"taxPeriod107": "ГД.00.2021",
"docNumber108": "000000000000001",
"docDate109": "2021-12-14",
"paymentKind110": "0"
},
"digestSignatures": [
{
"base64Encoded": "HlaeIHXXEcGT1bFxo1NlpAzpr+kJ2IQrcxVdvDTep6xjsmD1FDb+6NIyLT+/T24S0mPfVCU75sieOMt71TBS7w==",
"certificateUuid": "61000366d11e143acbc03a56d70001000366d1"
}
],
"externalId": "22a6dd81-103a-4d3a-8e9b-0ba4b527f5f6",
"incomeTypeCode": "2",
"number": "1",
"operationCode": "01",
"payeeAccount": "40702810564564564531",
"payeeBankBic": "040173745",
"payeeBankCorrAccount": "30101810800000000745",
"payeeInn": "7723870785",
"payeeKpp": "553453453",
"payeeName": "Общество с ограниченной ответственностью \"Получатель\"",
"payerAccount": "40702810600010800068",
"payerBankBic": "044525593",
"payerBankCorrAccount": "30101810200000000593",
"payerInn": "7728168971",
"payerKpp": "770801001",
"payerName": "Общество с ограниченной ответственностью \"Клиент\"",
"priority": "5",
"purpose": "7736576798//772201001//Наименование третьего лица//Единый налоговый платеж. НДС не облагается",
"urgencyCode": "NORMAL",
"vat": {
"rate": "0",
"type": "NO_VAT"
}
}'
Параметры ответа
{
"amount": 1.01,
"bankComment": null,
"bankStatus": "CREATED",
"crucialFieldsHash": "e28b4eaf7cfbec683a665b1513681e02e49cff891b476c2b3e046c0d961e32b2",
"date": "2018-12-31",
"deliveryKind": "электронно",
"departmentalInfo": {
"uip": "0",
"drawerStatus101": "01",
"kbk": "18210102010011000110",
"oktmo": "45902000",
"reasonCode106": "ТП",
"taxPeriod107": "ГД.00.2021",
"docNumber108": "000000000000001",
"docDate109": "2021-12-14",
"paymentKind110": "0"
},
"externalId": "22a6dd81-103a-4d3a-8e9b-0ba4b527f5f6",
"incomeTypeCode": "2",
"number": "1",
"operationCode": "01",
"payeeAccount": "40702810564564564531",
"payeeBankBic": "040173745",
"payeeBankCorrAccount": "30101810800000000745",
"payeeInn": "7723870785",
"payeeKpp": "553453453",
"payeeName": "Общество с ограниченной ответственностью \"Получатель\"",
"payerAccount": "40702810600010800068",
"payerBankBic": "044525593",
"payerBankCorrAccount": "30101810200000000593",
"payerInn": "7728168971",
"payerKpp": "770801001",
"payerName": "Общество с ограниченной ответственностью \"Клиент\"",
"priority": "5",
"purpose": "7736576798//772201001//Наименование третьего лица//Единый налоговый платеж. НДС не облагается",
"urgencyCode": "NORMAL",
"vat": {
"rate": "0",
"type": "NO_VAT"
}
}
Сумма платежа
Банковский комментарий к статусу документа
Статус документа. Принимает возможные значения:
- •
ACCEPTED
- Принят; - •
CREATED
- Создан; - •
SIGNED
- Подписан; - •
CARD2
- Ожидает оплаты; - •
DELETED
- Удалён; - •
REFUSEDBYBANK
- Отвергнут банком; - •
REQUISITEERROR
- Ошибка реквизитов; - •
IMPLEMENTED
- Исполнен
Hash от ключевых полей документа
Дата составления документа в формате YYYY-MM-DD
Вид платежа
Уникальный идентификатор платежа
Показатель статуса налогоплательщика
Код бюджетной классификации
Код OKTMO
Показатель основания платежа
Налоговый период или код таможенного органа
Номер налогового документа
Дата налогового документа в формате YYYY-MM-DD
Тип налогового платежа
Идентификатор документа, присвоенный партнером (UUID)
Код вида дохода получателей выплаты по 229-ФЗ
Номер документа
Код операции. Возможные значения:
- •
01
- Платёжное поручение
Счёт получателя платежа
БИК банка получателя платежа
Корсчет банка получателя платежа
ИНН получателя платежа
КПП получателя платежа
Полное наименование получателя платежа
Счёт плательщика
БИК банка плательщика
Корсчет банка плательщика
ИНН плательщика
КПП плательщика
Полное наименование плательщика
Очерёдность платежа
Назначение платежа
Код срочности. Принимает возможные значения:
- •
OFFHOURS
- Продлённый операционный день; - •
BESP
- Срочный платёж; - •
NORMAL
- Стандартный операционный день
Сумма НДС
Ставка НДС. Принимает возможные значения: 0
, 10
, 20
Способ расчета НДС. Принимает возможные значения:
- •
INCLUDED
- НДС включён в сумму платежа; - •
ONTOP
- НДС добавляется к сумме платежа; - •
NO_VAT
- Не облагается НДС; - •
MANUAL
- Ручной ввод НДС
{
"amount": 1.01,
"bankComment": null,
"bankStatus": "CREATED",
"crucialFieldsHash": "e28b4eaf7cfbec683a665b1513681e02e49cff891b476c2b3e046c0d961e32b2",
"date": "2018-12-31",
"deliveryKind": "электронно",
"departmentalInfo": {
"uip": "0",
"drawerStatus101": "01",
"kbk": "18210102010011000110",
"oktmo": "45902000",
"reasonCode106": "ТП",
"taxPeriod107": "ГД.00.2021",
"docNumber108": "000000000000001",
"docDate109": "2021-12-14",
"paymentKind110": "0"
},
"externalId": "22a6dd81-103a-4d3a-8e9b-0ba4b527f5f6",
"incomeTypeCode": "2",
"number": "1",
"operationCode": "01",
"payeeAccount": "40702810564564564531",
"payeeBankBic": "040173745",
"payeeBankCorrAccount": "30101810800000000745",
"payeeInn": "7723870785",
"payeeKpp": "553453453",
"payeeName": "Общество с ограниченной ответственностью \"Получатель\"",
"payerAccount": "40702810600010800068",
"payerBankBic": "044525593",
"payerBankCorrAccount": "30101810200000000593",
"payerInn": "7728168971",
"payerKpp": "770801001",
"payerName": "Общество с ограниченной ответственностью \"Клиент\"",
"priority": "5",
"purpose": "7736576798//772201001//Наименование третьего лица//Единый налоговый платеж. НДС не облагается",
"urgencyCode": "NORMAL",
"vat": {
"rate": "0",
"type": "NO_VAT"
}
}
Код ошибки. Принимает возможные значения: invalid_request
- Неверные входные параметры запроса
Описание ошибки
{
"error": "invalid_request",
"error_description": "Request is missing a required parameter: amount"
}
Код ошибки. Принимает возможные значения: invalid_token
- Предоставленный токен просрочен, отозван, имеет неправильный формат или недействителен по другим причинам
Описание ошибки
{
"error": "invalid_token",
"error_description": "The access token provided is expired, revoked, malformed, or invalid for other reasons"
}
Код ошибки. Принимает возможные значения:
- •
insufficient_scope
- У пользователя нет прав на использование запрашиваемого сервиса, доступ к которому не предусмотрен настройкамиscope
; - •
access_denied
- Доступ к счёту запрещён
Описание ошибки
{
"error": "insufficient_scope",
"error_description": "The request requires higher privileges than provided by the access token"
}
Код ошибки. Принимает возможные значения:
- •
unknown_endpoint
- Эндпоинт не найден или неактивен; - •
not_found
- Платёж не найден или пока не исполнен
Описание ошибки
{
"error": "unknown_endpoint",
"error_description": "Endpoint is not found or not active"
}
Код ошибки. Принимает возможные значения: conflict
- Платёжное поручение с таким externalId уже существует
Описание ошибки
{
"error": "conflict",
"error_description": "Payment with this externalId already exists"
}
Нет тела ответа
Код ошибки. Принимает возможные значения: internal_error
- Внутренняя ошибка сервиса при выполнении обработки запроса
Описание ошибки
{
"error": "internal_error",
"error_description": "Internal server error"
}
Нет тела ответа
Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в текущей версии документации.
Передача электронной подписи вместе с документом
Требования к передаваемой электронной подписи:
- •Подпись - PKCS7
- •Тип подписи - attached
- •Алгоритм - sha256
Для передачи ЭП под документом используется массив digestSignatures
, в котором передаются объекты типа Signature
. Серийный номер сертификата certificateUuid
заполняется значением поля serialNumber
из ответа метода "Получение RSA-сертификата".
Значение ЭП документа, закодированное в Base64
Серийный номер сертификата, использованного при создании ЭП
"digestSignatures": [
{
"base64Encoded": "HlaeIHXXEcGT1bFxo1NlpAzpr+kJ2IQrcxVdvDTep6xjsmD1FDb+6NIyLT+/T24S0mPfVCU75sieOMt71TBS7w==",
"certificateUuid": "61000366d11e143acbc03a56d70001000366d1"
}
]
Для платёжных поручений, создаваемых по собственным счетам, можно передать одну или две электронных подписи (или не передавать, если ЭП отсутствует) вместе с реквизитами создаваемого документа.
Если электронная подпись или подписи переданы в запросе, то они сохраняются вместе с документом, а сам документ продвигается дальше по своему жизненному циклу.
Если электронная подпись или подписи не были переданы, то документ сохраняется в своем начальном статусе и ожидает дальнейшего подписания в интерфейсе Альфа-Бизнес.
Подписание по алгоритму RSA
Для подписания может использоваться сертификат, выпущенный в Альфа-Бизнес, или сертификат, выпущенный при помощи сервиса Alfa API согласно разделу "Электронная подпись".
Перед подписанием необходимо провести каноникализацию JSON-данных используя правила RFC 8785.
@Override
public RsaSignResponse sign(RsaSignRequest request) throws Exception {
Security.addProvider(new BouncyCastleProvider());
BouncyCastleProvider provider = (BouncyCastleProvider) Security.getProvider("BC");
PrivateKey key = (PrivateKey) keyStore.getKey(KEYSTORE_ALIAS, KEYSTORE_PWD.toCharArray());
X509Certificate cert = (X509Certificate) keyStore
.getCertificate(KEYSTORE_ALIAS);
CMSTypedData msg = new CMSProcessableByteArray(request.getDataToSign().getBytes());
CMSSignedDataGenerator signedDataGen = new CMSSignedDataGenerator();
X509CertificateHolder signCert = new X509CertificateHolder(
cert.getEncoded());
ContentSigner signer = new JcaContentSignerBuilder("sha256WithRSAEncryption").setProvider(provider)
.build(key);
signedDataGen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
new JcaDigestCalculatorProviderBuilder().setProvider(provider)
.build()
).setDirectSignature(true).build(signer, signCert));
// add the signing cert to the signature
JcaCertStore certs = new JcaCertStore(Collections.singletonList(cert));
signedDataGen.addCertificates(certs);
CMSSignedData signedData = signedDataGen.generate(msg, true);
byte[] signatureBytes = signedData.getEncoded("DER");
MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
byte[] hashedString = messageDigest.digest(request.getDataToSign().getBytes());
return new RsaSignResponse()
.setDataToSignBase64(new String(Base64.getEncoder().encode(request.getDataToSign().getBytes(StandardCharsets.UTF_8))))
.setAttachedSignature(new String(Base64.getEncoder().encode(signatureBytes)))
.setPublicCertificate(new String(Base64.getEncoder().encode(cert.getEncoded())))
.setMessageDigest(new String(Base64.getEncoder().encode(hashedString)));
}
Формат дайджеста РПП
Сформированный дайджест перед подписанием должен быть закодирован в Base64.
Наименование поля | Описание | Пример |
---|---|---|
amount | Сумма платежа | 1.01 |
date | Дата составления документа | 2018-05-31 |
departmentalInfo.docNumber108 | Номер налогового документа | 000000000000001 |
departmentalInfo.drawerStatus101 | Показатель статуса налогоплательщика | 01 |
departmentalInfo.kbk | Код бюджетной классификации | 18210102010011000110 |
departmentalInfo.oktmo | Код ОКТМО | 45902000 |
departmentalInfo.paymentKind110 | Тип налогового платежа | НС |
departmentalInfo.reasonCode106 | Показатель основания платежа | ТП |
departmentalInfo.uip | Уникальный идентификатор платежа | 0 |
externalId | Идентификатор документа, присвоенный сервисом | 22a6dd81-103a-4d3a-8e9b-0ba4b527f5f6 |
incomeTypeCode | Код вида дохода получателей выплаты по 229-ФЗ | 2 |
operationCode | Код операции | 01 |
payeeAccount | Счет получателя платежа | 40702810564564564531 |
payeeBankBic | БИК банка получателя платежа | 040173745 |
payeeBankCorrAccount | Корсчет банка получателя платежа | 30101810800000000745 |
payeeInn | ИНН получателя платежа | 7723870785 |
payeeKpp | КПП получателя платежа | 553453453 |
payeeName | Полное наименование получателя платежа | Общество с ограниченной ответственностью "Получатель" |
payerAccount | Счет плательщика | 40702810600010800068 |
payerBankBic | БИК банка плательщика | 044525593 |
payerBankCorrAccount | Корсчет банка плательщика | 30101810200000000593 |
payerInn | ИНН плательщика | 7728168971 |
payerKpp | КПП плательщика | 770801001 |
payerName | Полное наименование плательщика | Общество с ограниченной ответственностью "Клиент" |
priority | Очередность платежа | 5 |
purpose | Назначение платежа | Оплата заказа №1. НДС не облагается. |
amount=1.01
date=2018-05-31
departmentalInfo.docNumber108=000000000000001
departmentalInfo.drawerStatus101=01
departmentalInfo.kbk=18210102010011000110
departmentalInfo.oktmo=45902000
departmentalInfo.paymentKind110=НС
departmentalInfo.reasonCode106=ТП
departmentalInfo.uip=0
externalId=22a6dd81-103a-4d3a-8e9b-0ba4b527f5f6
incomeTypeCode=2
operationCode=01
payeeAccount=40702810564564564531
payeeBankBic=040173745
payeeBankCorrAccount=30101810800000000745
payeeInn=7723870785
payeeKpp=553453453
payeeName=Общество с ограниченной ответственностью "Получатель"
payerAccount=40702810600010800068
payerBankBic=044525593
payerBankCorrAccount=30101810200000000593
payerInn=7728168971
payerKpp=770801001
payerName=Общество с ограниченной ответственностью "Клиент"
priority=5
purpose=Оплата заказа №1. НДС не облагается.