> For the complete documentation index, see [llms.txt](https://apidoc.tokenpay.me/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://apidoc.tokenpay.me/ru-ru/opisanie/proverka-podpisi.md).

# Проверка подписи

{% hint style="info" %}
ПОДСКАЗКА (TIP)

Продавец может проверить подпись ответа или обратного вызова (колбэка), выполнив следующие шаги.

Если подпись запроса проверенного продавца верна, tokenpay включает подпись ответа в HTTP-заголовок ответа. Мы рекомендуем продавцам проверять подпись ответа.

Точно так же tokenpay включает подпись пакета колбэка в HTTP-заголовок колбэка. Продавец должен проверить подпись колбэка, чтобы убедиться, что он был отправлен tokenpay.
{% endhint %}

#### Объединение (Concatenate)

Во-первых, продавец получает следующую информацию из ответа.

* Временная метка ответа в HTTP-заголовке `TTPay-Timestamp`.
* Случайная строка ответа в HTTP-заголовке `TTPay-Nonce`.
* Тело ответа (Response Body). Проверьте интерфейс в соответствии с порядком, возвращенным интерфейсом. Неверный порядок приведет к сбою проверки.

Строка подписи состоит из трех строк, по одному параметру на строку. Строка заканчивается на `\n` (перенос строки, значение кодировки ASCII равно 0x0A), и не добавляйте `\n` в последнюю строку. Если сам параметр заканчивается на `\n`, вам также нужно добавить `\n`.

```
Reply timestamp\n
Reply random string\n
Reply message body
```

Например, HTTP-сообщение с ответом выглядит следующим образом:

```
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 02 Apr 2019 12:59:40 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 2204
Connection: keep-alive
Keep-Alive: timeout=8
Content-Language: zh-CN
TTPay-Nonce: c5ac7061fccab6bf3e254dcf98995b8c
TTPay-Signature: CtcbzwtQjN8rnOXItEBJ5aQFSnIXESeV28Pr2YEmf9wsDQ8Nx25ytW6FXBCAFdrr0mgqngX3AD9gNzjnNHzSGTPBSsaEkIfhPF4b8YRRTpny88tNLyprXA0GU5ID3DkZHpjFkX1hAp/D0fva2GKjGRLtvYbtUk/OLYqFuzbjt3yOBzJSKQqJsvbXILffgAmX4pKql+Ln+6UPvSCeKwznvtPaEx+9nMBmKu7Wpbqm/+2ksc0XwjD+xlvlECkCxfD/OJ4gN3IurE0fpjxIkvHDiinQmk51BI7zQD8k1znU7r/spPqB+vZjc5ep6DC5wZUpFu5vJ8MoNKjCu8wnzyCFdA==
TTPay-Timestamp: 1554209980
Cache-Control: no-cache, must-revalidate

{"app_id":"xxxx"}
```

Тогда строка подписи будет следующей:

```
1554209980
c5ac7061fccab6bf3e254dcf98995b8c
{"app_id":"xxxx"}
```

#### Ответ (Reply)

Подпись ответа tokenpay передается через HTTP-заголовок `TTPay-Signature`. (Примечание: это пример, так как верстка может содержать переносы строк, фактические данные должны быть в одной строке)

```
CtcbzwtQjN8rnOXItEBJ5aQFSnIXESeV28Pr2YEmf9wsDQ8Nx25ytW6FXBCAFdrr0mgqngX3AD9gNzjnNHzSGTPBSsaEkIfhPF4b8YRRTpny88tNLyprXA0GU5ID3DkZHpjFkX1hAp/D0fva2GKjGRLtvYbtUk/OLYqFuzbjt3yOBzJSKQqJsvbXILffgAmX4pKql+Ln+6UPvSCeKwznvtPaEx+9nMBmKu7Wpbqm/+2ksc0XwjD+xlvlECkCxfD/OJ4gN3IurE0fpjxIkvHDiinQmk51BI7zQD8k1znU7r/spPqB+vZjc5ep6DC5wZUpFu5vJ8MoNKjCu8wnzyCFdA==
```

#### Оценка (Judgment)

Используйте метод `AES-256-ECB` для создания подписей (вы можете ссылаться на [создание подписи](/ru-ru/opisanie/sozdanie-podpisi.md)). Сгенерированная подпись сравнивается с подписью ответа. Если они не совпадают, данные были подделаны.
