using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
// 1. Build the body ONCE
var payload = JsonSerializer.Serialize(requestData);
// 2. Sign that exact string. ToHexString() returns UPPERCASE — lowercase it.
using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(signKey));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(payload));
var signature = Convert.ToHexString(hash).ToLowerInvariant();
// 3. Send the SAME string you signed
using var client = new HttpClient();
var content = new StringContent(payload, Encoding.UTF8, "application/json");
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
client.DefaultRequestHeaders.Add("Signature", signature);
var response = await client.PostAsync(
"https://api.napoleonpay.com/api/v1/payments", content);