> For the complete documentation index, see [llms.txt](https://developers.friendlypay.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.friendlypay.io/autentifikaciya.md).

# Аутентификация

## Аутентификация

**Общая информация**

Каждый HTTP запрос обязан иметь следующие заголовки:

1. x-fp-timestamp - временная метка
2. x-fp-nonce - уникальная строка
3. x-fp-api-token - api токен мерчанта
4. x-fp-signature - сигнатура

**Генерация x-fp-signature**

Генерируется алгоритмом sha256 HMAC с использованием секретного ключа на основе байтов, полученных путем конкатенации следующей информации:

1. Значение из заголовка x-fp-timestamp представленное в виде строки
2. Значение из заголовка x-fp-nonce
3. Тело запроса представленное в виде строки. Его следует брать в точности таким, каким он будет отправлен. Если тело запроса отсутствует, его не следует включать.

Итоговая строка: `{x-fp-timestamp}_{x-fp-nonce}_{body}`

Ниже приведен пример строки, которую необходимо подписать для получения доступа

```
1766326692825_23474b43-d98f-4d5f-92ed-6038b3afc461_{"shopId":2}
```

**Пример генерации на C#**

```csharp
public static class SignatureHelper
{
    public static bool IsVerify(long timestamp, string nonce, string? body, string signature, string secretKey)
    {
        string computedSignature = CalculateSignature(timestamp, nonce, body, secretKey);

        return CryptographicOperations.FixedTimeEquals(
            Encoding.UTF8.GetBytes(computedSignature),
            Encoding.UTF8.GetBytes(signature));
    }

    public static string CalculateSignature(long timestamp, string nonce, string? body, string secretKey)
    {
        var stringToSign = $"{timestamp}_{nonce}_{body}";

        using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secretKey));
        byte[] hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign));

        return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
    }
}
```
