Подпись формируется путем объединения тела запроса и пути запроса с параметрами запроса, после чего выполняется хэширование с использованием алгоритма HMAC SHA-256 и секрета ( sign_token) , предоставленного менеджером HM.
Copy {
"amount": 123.456
}/v2/merchant/transactions?queryParam1=123&queryParam2=456
Примеры кода для вычисления хэша:
Python PHP JavaScript C# Java
Copy import hashlib
import hmac
def calculate_signature ( url , request_json , secret ):
request_json_string = json . dumps (request_json)
parsed_url = urlparse (url)
signature_string = request_json_string + parsed_url . path + parsed_url . query
signature = hmac . new (secret. encode ( 'utf-8' ), signature_string. encode ( 'utf-8' ), hashlib.sha256). hexdigest ()
return signature
Copy function calculateSignature ($url , $requestJson , $secret) {
$signatureString = $requestJson . parse_url ( $url , PHP_URL_PATH ) . parse_url ( $url , PHP_URL_QUERY ) ;
$signature = hash_hmac ( 'sha256' , $signatureString , $secret ) ;
return $signature;
}
Copy const crypto = require ( 'crypto' );
function calculateSignature (url , requestJson , secret) {
const signatureString = requestJson + url .pathname + url .search;
const hmac = crypto .createHmac ( 'sha256' , secret);
hmac .update (signatureString);
return hmac .digest ( 'hex' );
}
Copy using System . Security . Cryptography ;
public string CalculateSignature ( string url , string requestJson , string secret)
{
string signatureString = requestJson + url;
using ( var hmac = new HMACSHA256 ( Encoding . UTF8 .GetBytes(secret)))
{
byte [] hashBytes = hmac .ComputeHash( Encoding . UTF8 .GetBytes(signatureString));
return Convert .ToBase64String(hashBytes);
}
}
Copy import org . apache . commons . codec . digest . HmacUtils ;
import org . apache . commons . codec . binary . Hex ;
import java . net . URI ;
import java . nio . charset . StandardCharsets ;
public String calculateSignature( URI url , String requestJson , String secret) {
String signatureString = requestJson + url . getPath () + url . getQuery ();
byte [] hmacSha256 = HmacUtils . hmacSha256 ( secret . getBytes ( StandardCharsets . UTF_8 ) , signatureString);
return Hex . encodeHexString (hmacSha256);
}