Skip to content

C#

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);