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

Вычисление цифровой подписи

В процессе информационного взаимодействия с BaaS партнёру может потребоваться вычислить цифровую подпись: например, для перевода средств на банковскую карту с помощью формы или при получении уведомления.

Для вычисления подписи необходимы строковые представления “секрета” (secret) и подписываемых данных, т.е. тела запроса (data). Значение secret предоставляется партнёру по запросу и не зависит от сценария взаимодействия с платформой — оно всегда одинаковое.

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

Необходимо обеспечить надежное хранение secret и не допускать несанкционированный доступ к нему.

Выполните следующие действия:

  • преобразуйте строки secret и data в байты UTF-8 secret_bytes и data_bytes, соответственно;
  • вызовите библиотечную реализацию алгоритма HmacSHA256 для вычисления байтового представления подписи;

    signature_bytes = HmacSHA256(secret_bytes, data_bytes)

  • закодируйте байты подписи в hex-представление и получите строку подписи.

    signature = hex(signature_bytes)

Пример кода на Python
    import hashlib
    import hmac

    data = '{"type":"CLEARING","eventDateTime":"2021-09-20T11:32:35.926795+03:00","txnId":"77fc0beb-1f42-4c46-b4d0-407e3caa13a4","txnType":"FAST_FUNDS","actionId":"ec6861e2-fe67-4d46-a13d-210f5e643e86","actionType":"CAPTURE_FAST_FUNDS","actionStatus":"SUCCESS","actionStatusDetails":{},"actionData":{"cardTokenId":"100080516478","clientId":"547606fd-d5f7-4a60-a004-92fabe246210","clearingDate":"2021-09-20","transactionAmount":{"currency":"RUB","value":"7.89"},"originTransactionAmount":{"currency":"RUB","value":"7.89"},"merchantId":"977492982538","merchantName":"TEST_MERCHANT_NAME","merchantType":"5331","terminalId":"35124585","acquirerId":"357754","wasNotAuthorizedBefore":true}}'
    key = 'cee66da5b04cb4f2026b5c8872dbcf8a'

    key_bytes = bytes(key, 'UTF-8')
    data_bytes = bytes(data, 'UTF-8')
    h = hmac.new(key_bytes, data_bytes, hashlib.sha256 )
    print( h.hexdigest() )
Результат выполнения кода
603ab1c988d87c342d7a2cb2b961cb2fd275a3bd2b97f38c0c36864f29a856fb