Интеграция

Алгоритм вычисления поля signature

Значение поля signature используется для проверки целостности сообщения и аутентификации запроса
Интеграция
Алгоритм вычисления поля signature
Значение поля signature используется для проверки целостности сообщения и аутентификации запроса
Дата публикации: 17 мая 2022
В каждом запросе со стороны вашего сервиса обязательно передаётся поле signature с уникальным значением. Значение этого поля используется для проверки целостности сообщения и аутентификации запроса.

Для формирования потребуется секретный ключ, который выдается в личном кабинете банка. В тестовом режиме используйте тестовый секретный ключ. При выполнении любого запроса значение поля формируется на стороне вашего ресурса на основе тех полей, которые будут отправлены в API.

На стороне эквайринга сигнатура формируется аналогичным образом на основе полей, полученных от внешнего источника, значения для параметра "testing" и вашего секретного ключа. Так, сигнатура, пришедшая в форме от магазина, и сигнатура, высчитанная на стороне интернет-эквайринга, должны оказаться одинаковыми, иначе сервис выдаст ошибку.

Удостоверьтесь, что все поля, передаваемые в html-форме, участвуют в расчете сигнатуры. Первым шагом при вычислении поля signature является формирование строки, которая содержит все значения не пустых полей, передаваемые в запросе. Эта строка имеет вид «field1=base64(value1)&field2=base64(value2)», в которой поля (строчными буквами) и их значения перечислены в алфавитном порядке, а значения закодированы с помощью алгоритма base64.

Затем от этой строки необходимо вычислить подпись с помощью хеш-функции SHA1, следующим образом: «SHA1(secret_key + SHA1(secret_key + values))

Пример вычисления поля signature.
1
Первое действие
Рассмотрим вычисление поля signature примере следующего запроса:
2
Второе действие
3
Третье действие
Объединим все полученные параметры в одну строку (через символ "& "). Данные будут выглядеть следующим образом:
amount=OTcz&client_email=dGVzdEB0ZXN0LnJ1&client_phone=KzcgOTEyIDk4NzY1NDM=&de
scription=0JfQsNC60LDQtyDihJYxNDQyNTg0MA==&merchant=YWQyNWVmMDYtMTgyNC00
MTNmLThlZjEtYzA4MTE1YjliOTc5&order_id=MTQ0MjU4NDA=&receipt_contact=dGVzdEBtYWls
LmNvbQ==&receipt_items=W3siZGlzY291bnRfc3VtIjogNDAsICJuYW1lIjogItCi0L7QstCw0YAgMS
IsICJwYXltZW50X21ldGhvZCI6ICJmdWxsX3ByZXBheW1lbnQiLCAicGF5bWVudF9vYmplY3QiOiA
iY29tbW9kaXR5IiwgInByaWNlIjogNDgsICJxdWFudGl0eSI6IDEwLCAic25vIjogIm9zbiIsICJ2YXQi
OiAidmF0MTAifSwgeyJuYW1lIjogItCi0L7QstCw0YAgMiIsICJwYXltZW50X21ldGhvZCI6ICJmdWxs
X3ByZXBheW1lbnQiLCAicGF5bWVudF9vYmplY3QiOiAiY29tbW9kaXR5IiwgInByaWNlIjogNTMzL
CAicXVhbnRpdHkiOiAxLCAic25vIjogIm9zbiIsICJ2YXQiOiAidmF0MTAifV0=&salt=ZFBVVEx0Yk1m
Y1RHemthQm5HdHNlS2xjUXltQ0xyWUk=&success_url=aHR0cDovL215YXdlc29tZXNpdGUuY29t
L3BheW1lbnRfc3VjY2Vzcw==&testing=MQ==&unix_timestamp=MTU3MzQ1MTE2MA==
4
Последнее действие
Обратите внимание, что необязательное поле cancel_url, которое не было заполнено, не включено в эту строку.

Вычисляем полученные параметры с помощью хеш-функции SHA1. Для вышеприведенной строки с параметрами и тестового ключа — "00112233445566778899aabbccddeeff", финальное значение поля signature будет таким: "9b28fa592922dc8a0c1ba2e40f2c0432aa617afd"

Примеры реализации вычисления поля signature на разных языках можно найти здесь.
Читайте также:

Вам помогла эта статья?