Вычисление цифровой подписи¶
В процессе информационного взаимодействия с BaaS партнёру может потребоваться вычислить цифровую подпись: например, для перевода средств на банковскую карту с помощью формы или при получении уведомления.
Для вычисления подписи необходимы строковые представления “секрета” (secret
) и подписываемых данных, т.е. тела запроса (data
). Значение secret
предоставляется партнёру по запросу и не зависит от сценария взаимодействия с платформой — оно всегда одинаковое.
Обратите внимание
Необходимо обеспечить надежное хранение secret
и не допускать несанкционированный доступ к нему.
Выполните следующие действия:
- преобразуйте строки
secret
иdata
в байты UTF-8secret_bytes
иdata_bytes
, соответственно; -
вызовите библиотечную реализацию алгоритма HmacSHA256 для вычисления байтового представления подписи;
signature_bytes = HmacSHA256(secret_bytes, data_bytes)
-
закодируйте байты подписи в hex-представление и получите строку подписи.
signature = hex(signature_bytes)
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() )