using System;
using System.Text;
using System.Security.Cryptography;
public class Program
{
public static void Main()
{
string httpMethod = "POST";
string timeStamp = "2026-04-06T14:16:24+07:00";
string accessToken = "A60CDE9tiT6PHzJjE6mqiyE6w0q4eQ2vsYWz0PUELAOWfcEnZbnwbhMM";
string relativeUrl = "/api/v3.0/account-inquiry-external";
string clientSecret = "26b796b5-2f05-41a6-bca0-c43f7df289a8";
string body = "{\"beneficiaryAccountNo\":\"888801000003301\",\"beneficiaryBankCode\":\"014\",\"additionalInfo\":{\"trxType\":\"01\",\"sourceAccountNo\":\"003694475058\"}}";
string signature = GetSignature(httpMethod, accessToken, relativeUrl, body, clientSecret, timeStamp);
Console.WriteLine("Generated Signature:");
Console.WriteLine(signature);
}
public static string GetSignature(string HTTPMethod, string accessToken, string RelativeUrl, string body, string clientSecret, string timeStamp)
{
string MinifyReqBody = MinifyJson(body);
string finalReqBody = CalculateRequestBodyHash(MinifyReqBody);
// Pattern: HTTPMethod:RelativeUrl:AccessToken:RequestBodyHash:Timestamp
string stringToSign = string.Format("{0}:{1}:{2}:{3}:{4}", HTTPMethod, RelativeUrl, accessToken, finalReqBody, timeStamp);
Console.WriteLine("String To Sign: " + stringToSign);
return GenerateSignatureHMACSHA512(clientSecret, stringToSign);
}
public static string MinifyJson(string json)
{
StringBuilder sb = new StringBuilder();
bool insideString = false;
foreach (char c in json)
{
if (c == '"')
{
insideString = !insideString;
}
if (!char.IsWhiteSpace(c) || insideString)
{
sb.Append(c);
}
}
return sb.ToString();
}
public static string CalculateRequestBodyHash(string requestBody)
{
using (SHA256 sha256 = SHA256.Create())
{
byte[] hashBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(requestBody));
// Returns hex string in lowercase without dashes
return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}
}
public static string GenerateSignatureHMACSHA512(string privateKey, string stringToSign)
{
try
{
using (HMACSHA512 hmac = new HMACSHA512(Encoding.UTF8.GetBytes(privateKey)))
{
byte[] hashBytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign));
return Convert.ToBase64String(hashBytes);
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
return null;
}
}
}