B2BH2H

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

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

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

Scope

payment

Описание

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

Параметры запроса
HEADERS
Атрибут
Описание
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 objectsoptional

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

base64Encoded
stringrequired

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

certificateUuid
stringrequired

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

externalId
stringrequired

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

incomeTypeCode
stringoptional

Код вида дохода получателей выплаты по 229-ФЗ. При значениях 1, 3, 5 в назначении платежа следует указать сумму взыскания в формате //ВЗС//сумма-копейки//, где сумма-копейки это сумма взыскания.

Пример при сумме взыскания в пять тысяч рублей: //ВЗС//5000-00//

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

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

rate
stringoptional

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

type
stringrequired

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

  • NO_VAT - Не облагается НДС. При выборе этого значения в параметре purpose необходимо обязательно отправить "НДС не облагается"
  • INCLUDED - НДС включен в сумму платежа. В параметре purpose необходимо указать посчитанное значение НДС, например: "В том числе НДС 10%, 100.00 руб."
  • ONTOP - НДС добавляется к сумме платежа. В параметре purpose необходимо указать посчитанное значение НДС, например: "Плюс 10% НДС, 100.00 руб."
  • MANUAL - Ручной ввод НДС

Значение по умолчанию NO_VAT

Пример запроса
Язык
curl --location --request POST 'https://baas.alfabank.ru/api/jp/v2/payments' \
--header 'Authorization: Bearer {access-token}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
  "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": "30101810200000000593",
  "payeeInn": "7723870785",
  "payeeKpp": "553453453",
  "payeeName": "Общество с ограниченной ответственностью \"Центр \"ИННОВАЦИЯ\"",
  "payerAccount": "40702810600010800068",
  "payerBankBic": "044525225",
  "payerBankCorrAccount": "30101810400000000225",
  "payerInn": "7736576798",
  "payerKpp": "772201001",
  "payerName": "Общество с ограниченной ответственностью \"Клиент\"",
  "priority": "5",
  "purpose": "1234567890//123456789//Иванов Иван Иванович оплата по договору 1. НДС не облагается",
  "urgencyCode": "NORMAL",
  "vat": {
    "rate": "0",
    "type": "NO_VAT"
  }
}'
Параметры ответа
Пример ответа 201 (Created)
{
  "amount": 1.01,
  "bankComment": "",
  "bankStatus": "CREATED",
  "crucialFieldsHash": "3ba4cecce366c3ad8db6edafb71052b37a8a1acc8013ff565879d8711c0c4316",
  "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": "30101810200000000593",
  "payeeInn": "7723870785",
  "payeeKpp": "553453453",
  "payeeName": "Общество с ограниченной ответственностью \"Центр \"ИННОВАЦИЯ\"",
  "payerAccount": "40702810102300000001",
  "payerBankBic": "040173745",
  "payerBankCorrAccount": "30101810400000000225",
  "payerInn": "7736576798",
  "payerKpp": "772201001",
  "payerName": "Общество с ограниченной ответственностью \"Клиент\"",
  "priority": "5",
  "purpose": "Оплата заказа №1. НДС не облагается",
  "urgencyCode": "NORMAL",
  "vat": {
    "rate": "0",
    "type": "NO_VAT"
  }
}
BODY
атрибут
описание
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). Если в банке уже есть документ с указанным в запросе 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

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

rate
stringoptional

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

type
stringrequired

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

  • NO_VAT - Не облагается НДС;
  • INCLUDED - НДС включен в сумму платежа;
  • ONTOP - НДС добавляется к сумме платежа;
  • MANUAL - Ручной ввод НДС

Значение по умолчанию NO_VAT

Пример ответа 201 (Created)
{
  "amount": 1.01,
  "bankComment": "",
  "bankStatus": "CREATED",
  "crucialFieldsHash": "3ba4cecce366c3ad8db6edafb71052b37a8a1acc8013ff565879d8711c0c4316",
  "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": "30101810200000000593",
  "payeeInn": "7723870785",
  "payeeKpp": "553453453",
  "payeeName": "Общество с ограниченной ответственностью \"Центр \"ИННОВАЦИЯ\"",
  "payerAccount": "40702810102300000001",
  "payerBankBic": "040173745",
  "payerBankCorrAccount": "30101810400000000225",
  "payerInn": "7736576798",
  "payerKpp": "772201001",
  "payerName": "Общество с ограниченной ответственностью \"Клиент\"",
  "priority": "5",
  "purpose": "Оплата заказа №1. НДС не облагается",
  "urgencyCode": "NORMAL",
  "vat": {
    "rate": "0",
    "type": "NO_VAT"
  }
}
BODY
атрибут
описание
error
stringrequired

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

  • invalid_request - Неверные входные параметры запроса
error_description
stringoptional

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

Пример ошибки 400 (Bad Request)
{
  "error": "invalid_request",
  "error_description": "Authorization header is not present in request headers"
}
BODY
атрибут
описание
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"
}
BODY
атрибут
описание
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"
}
BODY
атрибут
описание
error
stringrequired

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

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

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

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

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

  • conflict - Платёжное поручение с таким externalId уже существует
error_description
stringoptional

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

Пример ошибки 409 (Conflict)
{
  "error": "conflict",
  "error_description": "Request could not be processed because of conflict in the request"
}
BODY
атрибут
описание
Нет тела ответа
BODY
атрибут
описание
Нет тела ответа
BODY
атрибут
описание
error
stringrequired

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

  • internal_error - Внутренняя ошибка сервиса при выполнении обработки запроса
error_description
stringoptional

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

Пример ошибки 500 (Internal Server Error)
{
  "error": "internal_error",
  "error_description": "Internal server error"
}
BODY
атрибут
описание
Нет тела ответа
Передача электронной подписи вместе с документом

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

  • Формат подписи - PKCS#7
  • Тип подписи - ATTACHED
  • Алгоритм электронной подписи - sha256WithRSAEncryption

Для передачи ЭП под документом используется массив 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. НДС не облагается.