Проверка ключа подписи
Этот раздел содержит примеры реализации проверки подлинности входящих запросов с использованием ключа подписи. Это необходимо для обеспечения безопасности и целостности данных (например, при работе с вебхуками).
Подпись обычно передаётся в заголовке запроса и должна быть проверена путём вычисления HMAC-хэша с использованием общего секретного ключа.
.NET
using System.Security.Cryptography;
using System.Text;
using System.Text.Json.Nodes;
var jsonMessage = "[CALLBACK MESSAGE]";
var signatureKey = "[YOUR SIGNATURE KEY]";
var jsonNode = JsonNode.Parse(jsonMessage);
var resultElement = jsonNode!["result"]!;
var keys = new Dictionary<string, string>();
foreach (var property in (JsonObject)resultElement)
{
var valueNode = property.Value;
if (valueNode is null)
continue;
string valueStr = property.Key is "amount" or "commission"
? valueNode.GetValue<decimal>().ToString("F2")
: valueNode.ToString();
if (!string.IsNullOrWhiteSpace(valueStr))
keys.Add(property.Key, valueStr);
}
var orderedKeys = keys.OrderBy(kv => kv.Key, StringComparer.OrdinalIgnoreCase).ToArray();
var additionalString =
string.Join(":", orderedKeys.Select(kv => kv.Value));
var hash = SHA256.HashData(Encoding.UTF8.GetBytes($"{additionalString}:{signatureKey}"));
var result = Convert.ToBase64String(hash);
if (result == jsonNode["signature"]!.ToString())
Console.WriteLine("Signature is valid");
else
Console.WriteLine("INVALID SIGNATURE!");.PHP
node.js
Последнее обновление