using Newtonsoft.Json.Linq;
using System.Security.Cryptography;
public static void Main()
""action"": ""Payment.Succeeded"",
""sessionIdentifier"": ""02c7568b-95af-4e1d-8e5e-b2fabbce14f8"",
""amountFormatted"": ""$50.00"",
""referenceNumber"": ""M24GZH-5ES3"",
""status"": ""Succeeded"",
""accountNumber"": ""25"",
""accountName"": ""Kristy Collins""
var jsonPayload = JsonConvert.SerializeObject(JObject.Parse(payload));
Console.WriteLine(jsonPayload);
var secret = "a25aa7687a46f3b06f439877177d1987251d765a";
var signature = DataSigning.HmacSha1HexDigest(secret, jsonPayload);
var expectedSignature = "e0665b92e71a514ffdf7b387f7e3ae5c555d1cbf";
Console.WriteLine(signature);
Console.WriteLine(expectedSignature == signature);
public static class DataSigning
public static string HmacSha1HexDigest(string secret, string dataToSign)
var encoding = new System.Text.ASCIIEncoding();
var keyByte = encoding.GetBytes(secret);
var hmacSha1 = new HMACSHA1(keyByte);
var messageBytes = encoding.GetBytes(dataToSign);
var hashMessage = hmacSha1.ComputeHash(messageBytes);
return ByteToHexString(hashMessage).ToLower();
private static string ByteToHexString(byte[] buff)
return buff.Aggregate("", (current, t) => current + t.ToString("X2"));