B2BH2H

Создание рублёвого платёжного поручения

Пром POST https://baas.alfabank.ru/api/jp/v2/payments

Песочница POST https://sandbox.alfabank.ru/api/jp/v2/payments

Scope

payment

Описание

Метод /v2/payments позволяет Партнеру создавать платёжные поручения по собственным счетам или счетам клиента. Отправка денежных средств возможна только на счёт резидента РФ.

Параметры запроса

HEADER
Атрибут
Описание
Authorization
stringrequired

Bearer {access_token}, полученный по Authorization Code Flow / Authorization Code Flow H2H

Accept
stringrequired

application/json

Content-Type
stringrequired

application/json

BODY
Атрибут
Описание
amount
numberrequired

Сумма платежа

date
stringrequired

Дата составления документа в формате YYYY-MM-DD

deliveryKind
stringoptional

Вид платежа. Возможные значения: электронно . Если не заполнено, то будет присвоено значение электронно

objectoptional

Реквизиты налогового, таможенного или иного бюджетного платежа

uip
stringoptional

Уникальный идентификатор платежа

drawerStatus101
stringoptional

Показатель статуса налогоплательщика

kbk
stringoptional

Код бюджетной классификации

oktmo
stringoptional

Код OKTMO

reasonCode106
stringoptional

Показатель основания платежа

taxPeriod107
stringoptional

Налоговый период или код таможенного органа

docNumber108
stringoptional

Номер налогового документа

docDate109
stringoptional

Дата налогового документа в формате YYYY-MM-DD

paymentKind110
stringoptional

Тип налогового платежа

array of objectoptional

Электронные подписи по дайджесту документа

base64Encoded
stringrequired

Значение электронной подписи, закодированное в Base64

certificateUuid
stringrequired

Серийный номер сертификата, использованного при создании ЭП

externalId
stringrequired

Идентификатор документа, присвоенный партнером (UUID). Если в банке уже есть документ с указанным в запросе externalId , то в ответе вернутся реквизиты ранее созданного платёжного поручения с кодом ответа 200 OK

incomeTypeCode
stringoptional

Код вида дохода получателей выплаты по 229-ФЗ

number
stringoptional

Номер документа. Если поле не заполнено, то номер присваивается автоматически

operationCode
stringrequired

Код операции. Возможные значения:

  • 01 - Платёжное поручение
payeeAccount
stringrequired

Счёт получателя платежа

payeeBankBic
stringrequired

БИК банка получателя платежа

payeeBankCorrAccount
stringoptional

Корсчет банка получателя платежа

payeeInn
stringoptional

ИНН получателя платежа

payeeKpp
stringoptional

КПП получателя платежа

payeeName
stringrequired

Полное наименование получателя платежа

payerAccount
stringrequired

Счёт плательщика

payerBankBic
stringrequired

БИК банка плательщика

payerBankCorrAccount
stringrequired

Корсчет банка плательщика

payerInn
stringrequired

ИНН плательщика

payerKpp
stringoptional

КПП плательщика

payerName
stringrequired

Полное наименование плательщика

priority
stringrequired

Очерёдность платежа

purpose
stringrequired

Назначение платежа. Максимальное количество символов - 210.

При оформлении платежей в бюджет за третье лицо необходимо указать:

  • ИНН и КПП (при наличии) плательщика-владельца счета;
  • Наименование налогоплательщика, плательщика сборов, страховых взносов и иных платежей (третьего лица).

Для разделения информации об ИНН, КПП клиента и о налогоплательщике от иной информации, указываемой в реквизите, воспользуйтесь символами //

urgencyCode
stringoptional

Код срочности. Возможные значения:

  • OFFHOURS - Продлённый операционный день;
  • BESP - Срочный платёж;
  • NORMAL - Стандартный операционный день
objectoptional

Данные НДС. Если объект не указан, то будут присвоены значения по умолчанию

amount
numberoptional

Сумма НДС

rate
stringoptional

Ставка НДС. Возможные значения: 0 , 10 , 20 . Значение по умолчанию 0

type
stringrequired

Способ расчета НДС. Возможные значения:

  • 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"
    }
  }'

Параметры ответа

Пример ответа 201 (Created)
{
    "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"
    }
}
amount
numberrequired

Сумма платежа

bankComment
stringoptional

Банковский комментарий к статусу документа

bankStatus
stringoptional

Статус документа. Принимает возможные значения:

  • ACCEPTED - Принят;
  • CREATED - Создан;
  • SIGNED - Подписан;
  • CARD2 - Ожидает оплаты;
  • DELETED - Удалён;
  • REFUSEDBYBANK - Отвергнут банком;
  • REQUISITEERROR - Ошибка реквизитов;
  • IMPLEMENTED - Исполнен
crucialFieldsHash
stringoptional

Hash от ключевых полей документа

date
stringrequired

Дата составления документа в формате YYYY-MM-DD

deliveryKind
stringoptional

Вид платежа

objectoptional

Реквизиты налогового, таможенного или иного бюджетного платежа

uip
stringoptional

Уникальный идентификатор платежа

drawerStatus101
stringoptional

Показатель статуса налогоплательщика

kbk
stringoptional

Код бюджетной классификации

oktmo
stringoptional

Код OKTMO

reasonCode106
stringoptional

Показатель основания платежа

taxPeriod107
stringoptional

Налоговый период или код таможенного органа

docNumber108
stringoptional

Номер налогового документа

docDate109
stringoptional

Дата налогового документа в формате YYYY-MM-DD

paymentKind110
stringoptional

Тип налогового платежа

externalId
stringrequired

Идентификатор документа, присвоенный партнером (UUID)

incomeTypeCode
stringoptional

Код вида дохода получателей выплаты по 229-ФЗ

number
stringoptional

Номер документа

operationCode
stringrequired

Код операции. Возможные значения:

  • 01 - Платёжное поручение
payeeAccount
stringrequired

Счёт получателя платежа

payeeBankBic
stringrequired

БИК банка получателя платежа

payeeBankCorrAccount
stringoptional

Корсчет банка получателя платежа

payeeInn
stringoptional

ИНН получателя платежа

payeeKpp
stringoptional

КПП получателя платежа

payeeName
stringrequired

Полное наименование получателя платежа

payerAccount
stringrequired

Счёт плательщика

payerBankBic
stringrequired

БИК банка плательщика

payerBankCorrAccount
stringrequired

Корсчет банка плательщика

payerInn
stringrequired

ИНН плательщика

payerKpp
stringoptional

КПП плательщика

payerName
stringrequired

Полное наименование плательщика

priority
stringrequired

Очерёдность платежа

purpose
stringrequired

Назначение платежа

urgencyCode
stringoptional

Код срочности. Принимает возможные значения:

  • OFFHOURS - Продлённый операционный день;
  • BESP - Срочный платёж;
  • NORMAL - Стандартный операционный день
objectoptional

Данные НДС

amount
numberoptional

Сумма НДС

rate
stringoptional

Ставка НДС. Принимает возможные значения: 0 , 10 , 20

type
stringrequired

Способ расчета НДС. Принимает возможные значения:

  • INCLUDED - НДС включён в сумму платежа;
  • ONTOP - НДС добавляется к сумме платежа;
  • NO_VAT - Не облагается НДС;
  • MANUAL - Ручной ввод НДС
Пример ответа 201 (Created)
{
    "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"
    }
}
error
stringrequired

Код ошибки. Принимает возможные значения: invalid_request - Неверные входные параметры запроса

error_description
stringoptional

Описание ошибки

Пример ошибки 400 (Bad Request)
{
  "error": "invalid_request",
  "error_description": "Request is missing a required parameter: amount"
}
error
stringrequired

Код ошибки. Принимает возможные значения: invalid_token - Предоставленный токен просрочен, отозван, имеет неправильный формат или недействителен по другим причинам

error_description
stringoptional

Описание ошибки

Пример ошибки 401 (Unauthorized)
{
  "error": "invalid_token",
  "error_description": "The access token provided is expired, revoked, malformed, or invalid for other reasons"
}
error
stringrequired

Код ошибки. Принимает возможные значения:

  • insufficient_scope - У пользователя нет прав на использование запрашиваемого сервиса, доступ к которому не предусмотрен настройками scope ;
  • access_denied - Доступ к счёту запрещён
error_description
stringoptional

Описание ошибки

Пример ошибки 403 (Forbidden)
{
  "error": "insufficient_scope",
  "error_description": "The request requires higher privileges than provided by the access token"
}
error
stringrequired

Код ошибки. Принимает возможные значения:

  • unknown_endpoint - Эндпоинт не найден или неактивен;
  • not_found - Платёж не найден или пока не исполнен
error_description
stringoptional

Описание ошибки

Пример ошибки 404 (Not Found)
{
  "error": "unknown_endpoint",
  "error_description": "Endpoint is not found or not active"
}
error
stringrequired

Код ошибки. Принимает возможные значения: conflict - Платёжное поручение с таким externalId уже существует

error_description
stringoptional

Описание ошибки

Пример ошибки 409 (Conflict)
{
  "error": "conflict",
  "error_description": "Payment with this externalId already exists"
}
Пример ответа 429 (Too Many Requests)
Нет тела ответа
error
stringrequired

Код ошибки. Принимает возможные значения: internal_error - Внутренняя ошибка сервиса при выполнении обработки запроса

error_description
stringoptional

Описание ошибки

Пример ошибки 500 (Internal Server Error)
{
  "error": "internal_error",
  "error_description": "Internal server error"
}
Пример ответа 503 (Service Unavailable)
Нет тела ответа

Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в текущей версии документации.

Передача электронной подписи вместе с документом

Требования к передаваемой электронной подписи:

  • Подпись - PKCS7
  • Тип подписи - attached
  • Алгоритм - sha256

Для передачи ЭП под документом используется массив digestSignatures , в котором передаются объекты типа Signature . Серийный номер сертификата certificateUuid заполняется значением поля serialNumber из ответа метода "Получение RSA-сертификата".

SIGNATURE
Атрибут
Описание
array of objectoptional

Электронные подписи по дайджесту документа

base64Encoded
stringrequired

Значение ЭП документа, закодированное в Base64

certificateUuid
stringrequired

Серийный номер сертификата, использованного при создании ЭП

Пример электронной подписи по дайджесту документа
"digestSignatures": [
    {
        "base64Encoded": "HlaeIHXXEcGT1bFxo1NlpAzpr+kJ2IQrcxVdvDTep6xjsmD1FDb+6NIyLT+/T24S0mPfVCU75sieOMt71TBS7w==",
        "certificateUuid": "61000366d11e143acbc03a56d70001000366d1"
    }
]

Для платёжных поручений, создаваемых по собственным счетам, можно передать одну или две электронных подписи (или не передавать, если ЭП отсутствует) вместе с реквизитами создаваемого документа.

Если электронная подпись или подписи переданы в запросе, то они сохраняются вместе с документом, а сам документ продвигается дальше по своему жизненному циклу.

Если электронная подпись или подписи не были переданы, то документ сохраняется в своем начальном статусе и ожидает дальнейшего подписания в интерфейсе Альфа-Бизнес.

Подписание по алгоритму RSA

Для подписания может использоваться сертификат, выпущенный в Альфа-Бизнес, или сертификат, выпущенный при помощи сервиса Alfa API согласно разделу "Электронная подпись".

Перед подписанием необходимо провести каноникализацию JSON-данных используя правила RFC 8785.

Пример формирования RSA подписи
    @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. НДС не облагается.