Перейти к содержанию

Подпись платёжных поручений

Для отправки платёжных поручений партнёру необходимо подписать запрос и передать значение подписи в заголовке QIWI-Payment-Signature.

Чтобы понять, в каких запросах следует передавать QIWI-Payment-Signature: <значение подписи>, см. описание HTTP Headers в документации Payments API.

QIWI-Payment-Signature является дополнительным фактором безопасности: его использование не отменяет необходимости передавать Bearer Token в заголовке запроса Authorization.

Для передачи платёжных поручений BaaS партнёр должен:

  1. Создать пару ключей с помощью алгоритма RSA-2048.

    • Одна из доступных утилит — OpenSSL.
    • Размер закрытого ключа — 2048 бит, формат — PEM.
  2. Передать BaaS закодированный в Base64 публичный ключ, соответствующий секретному ключу.

  3. Подписывать каждый запрос к Payments API, требующий передачи заголовка QIWI-Payment-Signature.

Шаги 1 и 2 выполняются разово, шаг 3 — каждый раз при создании запроса.

Обратите внимание

Пару RSA-ключей необходимо перевыпускать каждый год.

Создание пары ключей

Для создания пары ключей с помощью OpenSSL, партнёру необходимо:

  1. Сгенерировать закрытый ключ.

    Команда
    openssl genrsa -out private-key.pem 2048
    

    В папке выполнения команды будет создан файл с секретным ключом: private-key.pem.

    Обратите внимание

    Секретный ключ недопустимо передавать третьим лицам, сохраняйте его конфиденциальность.

  2. Получить открытый ключ, соответствующий закрытому.

    Команда
    openssl rsa -in private-key.pem -pubout -out public-key.pem
    
  3. Закодировать полученный ключ public-key.pem в Base64.

    Команда
    base64 -i public-key.pem
    

Передача публичного ключа BaaS

Партнёр должен передать BaaS результат, полученный на шаге 3 этапа «Создание пары ключей». Способ передачи public-key.pem необходимо уточнить у курирующего менеджера.

Подпись платёжного запроса

Для подписи платёжных запросов партнёру следует выполнить нижеописанные действия. Примеры в описании приведены на языке Bash.

  1. Сформировать тело запроса в виде строки с параметрами запроса.

    Шаблон строки
    REQUEST_BODY='{"amount":{"value":100, "currency":"RUB"},...'
    
  2. Сформировать цифровую подпись с помощью алгоритма SHA256withRSA и секретного ключа private-key.pem, полученного на этапе Создание пары ключей».

    SIGNATURE_RAW=$(echo -n $REQUEST_BODY | openssl dgst -sha256 -sign private-key.pem)
    
  3. Закодировать полученную цифровую подпись при помощи Base64 в строку.

    SIGNATURE_BASE64=$(echo -n $SIGNATURE_RAW | base64)
    
  4. Передать закодированную цифровую подпись в заголовке QIWI-Payment-Signature при отправке запроса к Payments API.