B2BH2H

Выполнение исходящего платежа в СБП за один шаг

Песочница
POST https://sandbox.alfabank.ru/api/sbp/jp/v1/outgoing-payments/one-pay
Пром
POST https://baas.alfabank.ru/api/sbp/jp/v1/outgoing-payments/one-pay
Scope

b2b-sbp

Параметры запроса
HEADERS
Атрибут
Описание
Authorization
stringrequired
Accept
stringrequired

application/json

Content-Type
stringrequired

application/json

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

Контекст клиента

b2bClientId
stringrequired

Идентификатор клиента, от имени которого выполняется запрос. Банк сообщает партнёру API при подключении

partnerId
integerrequired

Идентификатор партнёра. Банк сообщает партнёру API при подключении

qrcId
stringrequired

Идентификатор платёжной ссылки

payerAccount
stringrequired

Счёт списания

amount
integerrequired

Сумма к зачислению в копейках

paymentPurpose
stringrequired

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

takeTax
booleanrequired

Информация о взимании НДС. Возможные значения:

  • •
    true - облагается НДС;
  • •
    false - не облагается НДС
taxAmount
integeroptional

Сумма налога Операции СБП в копейках

array of objectsrequired

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

base64Encoded
stringrequired

Значение электронной подписи, закодированное в Base64. Как сформировать подпись, смотрите в инструкции «Формирование и передача подписи» этой статьи

certificateUuid
stringoptional

Серийный номер сертификата, использованного при создании RSA-сертификата. При подписании УКЭП заполнять не нужно

signatureType
stringrequired

Тип электронной подписи. Возможные значения:

  • •
    KEP - квалифицированная электронная подпись (КЭП);
  • •
    RSA - RSA
poaNumber
stringoptional

Номер машиночитаемой доверенности. Заполняется в случае использовании МЧД при подписании УКЭП

Пример запроса
Язык
1curl --location 'https://baas.alfabank.ru/api/sbp/jp/v1/outgoing-payments/one-pay' \
2--header 'Authorization: Bearer {access-token}' \
3--header 'Content-Type: application/json' \
4--header 'Accept: application/json' \
5--data '{
6  "client": {
7    "b2bClientId": "021be5ed-6312-4982-a4e9-2a2cc44bc88c",
8    "partnerId": 214
9  },
10  "qrcId": "AD1000038AQ1FG409KGACUQU5QRSH3FM",
11  "payerAccount": "40702810100010000001",
12  "amount": 1000000,
13  "paymentPurpose": "Оплата по договору №123456789 от 01.09.2001",
14  "takeTax": true,
15  "taxAmount": 200000,
16  "digestSignatures": [
17    {
18      "base64Encoded": "HlaeIHXXEcGT1bFxo1NlpAzpr+kJ2IQrcxVdvDTep6xjsmD1FDb+6NIyLT+/T24S0mPfVCU75sieOMt71TBS7w==",
19      "certificateUuid": "61000366d11e143acbc03a56d70001000366d1",
20      "signatureType": "RSA",
21      "poaNumber": null
22    }
23  ]
24}'
Параметры ответа
Пример ответа 201 (Created)
1{
2  "outgoingPaymentId": "22a6dd81-103a-4d3a-8e9b-0ba4b527f5f6",
3  "qrcId": "AD1000038AQ1FG409KGACUQU5QRSH3FM",
4  "status": "COMPLETE",
5  "commission": 100
6}
BODY
атрибут
описание
outgoingPaymentId
stringrequired

Идентификатор платежа в СБП B2B

qrcId
stringrequired

Идентификатор платёжной ссылки

status
stringrequired

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

  • •
    SENDING_MESSAGE - платёж в обработке;
  • •
    COMPLETE - платёж выполнен;
  • •
    ERROR - платёж отклонён
commission
integeroptional

Сумма комиссии в копейках

Пример ответа 201 (Created)
1{
2  "outgoingPaymentId": "22a6dd81-103a-4d3a-8e9b-0ba4b527f5f6",
3  "qrcId": "AD1000038AQ1FG409KGACUQU5QRSH3FM",
4  "status": "COMPLETE",
5  "commission": 100
6}
BODY
атрибут
описание
error
stringrequired

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

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

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

Пример ошибки 400 (Bad Request)
1{
2  "error": "invalid_request",
3  "error_description": "Authorization header is not present in request headers"
4}
BODY
атрибут
описание
error
stringrequired

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

  • •
    invalid_token - предоставленный токен просрочен, отозван, имеет неправильный формат или недействителен по другим причинам. Необходимо получить новый токен доступа
error_description
stringoptional

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

Пример ошибки 401 (Unauthorized)
1{
2  "error": "invalid_token",
3  "error_description": "The access token provided is expired, revoked, malformed, or invalid for other reasons"
4}
BODY
атрибут
описание
error
stringrequired

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

  • •
    insufficient_scope - при запросе токена доступа не были переданы все необходимые scopes. Необходимо повторно отправить запрос на получение токена доступа с указанием всех доступных scopes
error_description
stringoptional

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

Пример ошибки 403 (Forbidden)
1{
2  "error": "insufficient_scope",
3  "error_description": "The request requires higher privileges than provided by the access token"
4}
BODY
атрибут
описание
error
stringrequired

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

  • •
    unknown_endpoint - эндпоинт не найден или неактивен
error_description
stringoptional

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

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

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

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

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

Пример ошибки 500 (Internal Server Error)
1{
2  "error": "internal_error",
3  "error_description": "Internal server error"
4}
Нет тела ответа
Формирование и передача подписи

Для формирования и передачи значения подписи платежа в параметре base64Encoded массива digestSignatures выполните следующие шаги:

1

Сформируйте дайджест документа

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

Набор полей включает:

Наименование поля Описание Пример
amount Сумма платежа в копейках 1000000
b2bClientId Идентификатор клиента 021be5ed-6312-4982-a4e9-2a2cc44bc88c
partnerId Идентификатор партнёра 214
payerAccount Номер счёта списания 40702810100010000001
paymentPurpose Назначение платежа Оплата по договору №123456789 от 01.09.2001
qrcId Идентификатор платёжной ссылки AD1000038AQ1FG409KGACUQU5QRSH3FM
takeTax Информация о взимании НДС true
taxAmount Сумма налога Операции СБП в копейках 200000

При формировании дайджеста необходимо учитывать:

  • •
    Необходимо использовать кодировку UTF-8.
  • •
    Поля дайджеста должны быть отсортированы по алфавиту (от A до Z).
  • •
    Значения сумм и комиссий в дайджесте и в запросе должны быть идентичны.
  • •
    Если какое-то поле не заполняется и не передаётся в запросе, то его не требуется добавлять в дайджест.
  • •
    Разделитель строк должен быть в формате unix (одиночный \n).
  • •
    Последняя строка дайджеста не должна содержать перевод строки.
Пример дайджеста
1amount=1000000
2b2bClientId=021be5ed-6312-4982-a4e9-2a2cc44bc88c
3partnerId=214
4payerAccount=40702810100010000001
5paymentPurpose=Оплата по договору №123456789 от 01.09.2001
6qrcId=AD1000038AQ1FG409KGACUQU5QRSH3FM
7takeTax=true
8taxAmount=200000
2

Закодируйте сформированный дайджест в Base64

Сформированный дайджест перед подписанием необходимо закодировать в Base64.

Пример дайджеста, закодированного в Base64
1YW1vdW50PTEwMDAwMDAKYjJiQ2xpZW50SWQ9MDIxYmU1ZWQtNjMxMi00OTgyLWE0ZTktMmEyY2M0NGJjODhjCnBhcnRuZXJJZD0yMTQKcGF5ZXJBY2NvdW50PTQwNzAyODEwMTAwMDEwMDAwMDAxCnBheW1lbnRQdXJwb3NlPdCe0L/Qu9Cw0YLQsCDQv9C+INC00L7Qs9C+0LLQvtGA0YMg4oSWMTIzNDU2Nzg5INC+0YIgMDEuMDkuMjAwMQpxcmNJZD1BRDEwMDAwMzhBUTFGRzQwOUtHQUNVUVU1UVJTSDNGTQp0YWtlVGF4PXRydWUKdGF4QW1vdW50PTIwMDAwMA==
3

Сформируйте отсоединённую (откреплённую) ЭП дайджеста документа

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

Для подписания дайджеста может использоваться закрытый ключ, полученный при выпуске RSA-сертификата в Альфа-Бизнес или при помощи сервиса Alfa API Электронная подпись. Требуется сертификат с шифрованием SHA256 или SHA512.

Формат подписи: PKCS#7 Detached. Для создания структуры контейнера электронной подписи PKCS#7, вычисления хэша данных и электронной подписи рекомендуется использовать криптографический провайдер и его API с открытой лицензией Bouncy Castle.

Структура SignerInfo должна включать следующие подписываемые атрибуты SignedAttrs:

  • •
    ContentType: OID 1.2.840.113549.1.7.1
  • •
    SigningTime: OID 1.2.840.113549.1.9.5
  • •
    CMSAlgorithmProtection: OID 1.2.840.113549.1.9.52 (RFC 6211)
  • •
    messageDigest: OID 1.2.840.113549.1.9.4

Атрибуты unsignedAttrs в структуре SignerInfo не используется.

Подписание по алгоритму ГОСТ с использованием сертификата УКЭП

Для подписания дайджеста может использоваться закрытый ключ, соответствующий сертификату УКЭП, выпущенному любым аккредитованным УЦ. При подписании УКЭП допускается передача только одной подписи в массиве digestSignatures.

4

Закодируйте полученное значение ЭП в Base64

5

Передайте полученное значение ЭП в параметре base64Encoded массива digestSignatures тела запроса