> 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/fr-fr/description/verification-de-la-signature.md).

# Vérification de la signature

{% hint style="info" %}
ASTUCE (TIP)

Le commerçant peut vérifier la signature de la réponse ou du rappel (callback) en suivant les étapes ci-dessous.

Si la signature de requête du commerçant vérifié est correcte, tokenpay inclut la signature de réponse dans l'en-tête HTTP de la réponse. Nous recommandons aux commerçants de vérifier la signature de la réponse.

De même, tokenpay inclut la signature du paquet de rappel dans l'en-tête HTTP du rappel. Le commerçant doit vérifier la signature du rappel pour s'assurer que le rappel a bien été envoyé par tokenpay.
{% endhint %}

#### Concaténer (Concatenate)

Tout d'abord, le commerçant obtient les informations suivantes à partir de la réponse.

* Horodatage de réponse dans l'en-tête HTTP `TTPay-Timestamp`.
* Chaîne aléatoire de réponse dans l'en-tête HTTP `TTPay-Nonce`.
* Corps de la réponse (Response Body). Vérifiez l'interface selon l'ordre renvoyé par celle-ci. Un ordre incorrect entraînera l'échec de la vérification.

La chaîne de signature comporte trois lignes, un paramètre par ligne. La ligne se termine par `\n` (saut de ligne, la valeur d'encodage ASCII est 0x0A), et n'ajoutez pas de `\n` sur la dernière ligne. Si le paramètre lui-même se termine par `\n`, vous devez également ajouter un `\n`.

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

Par exemple, un message de réponse HTTP se présente comme suit :

```
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"}
```

Alors la chaîne de signature est :

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

#### Réponse (Reply)

La signature de réponse tokenpay est transmise via l'en-tête HTTP `TTPay-Signature`. (Remarque : il s'agit d'un exemple car la composition peut contenir des sauts de ligne, les données réelles doivent figurer sur une seule ligne)

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

#### Jugement (Judgment)

Utilisez la méthode `AES-256-ECB` pour générer des signatures (vous pouvez vous référer à la [génération de signature](/fr-fr/description/generation-de-signature.md)). La signature générée est comparée à la signature de réponse. Si elles ne correspondent pas, les données ont été altérées.
