> 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/ms-my/penerangan/pengesahan-tandatangan.md).

# Pengesahan tandatangan

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

Pedagang boleh mengesahkan tandatangan respons atau panggilan balik (callback) dengan mengikuti langkah-langkah di bawah.

Jika tandatangan permintaan pedagang yang disahkan adalah betul, tokenpay menyertakan tandatangan balasan dalam pengepala HTTP balasan. Kami mengesyorkan agar pedagang mengesahkan tandatangan respons.

Begitu juga, tokenpay menyertakan tandatangan paket panggilan balik dalam pengepala HTTP panggilan balik. Pedagang mesti mengesahkan tandatangan panggilan balik untuk memastikan bahawa panggilan balik dihantar oleh tokenpay.
{% endhint %}

#### Menggabungkan (Concatenate)

Pertama, pedagang mendapatkan maklumat berikut daripada respons.

* Cap masa balasan dalam pengepala HTTP `TTPay-Timestamp`.
* Rentetan rawak balasan dalam pengepala HTTP `TTPay-Nonce`.
* Isi Respons (Response Body). Semak antara muka mengikut susunan yang dikembalikan oleh antara muka. Susunan yang tidak betul akan menyebabkan kegagalan semakan.

Rentetan tandatangan mempunyai tiga baris, satu parameter untuk setiap baris. Baris berakhir dengan `\n` (pemisah baris, nilai pengekodan ASCII ialah 0x0A), dan jangan tambah `\n` pada baris terakhir. Jika parameter itu sendiri berakhir dengan `\n`, anda juga perlu menambah `\n`.

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

Sebagai contoh, mesej balasan HTTP adalah seperti berikut:

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

Maka rentetan tandatangan ialah:

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

#### Balasan (Reply)

Tandatangan balasan tokenpay dihantar melalui pengepala HTTP `TTPay-Signature`. (Nota: Contoh kerana penetapan jenis mungkin mengandungi pemisah baris, data sebenar hendaklah berada pada satu baris)

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

#### Penghakiman (Judgment)

Gunakan kaedah `AES-256-ECB` untuk menjana tandatangan (Anda boleh merujuk kepada [penjanaan tandatangan](/ms-my/penerangan/penjanaan-tandatangan.md)). Tandatangan yang dijana dibandingkan dengan tandatangan balasan. Jika tidak, data telah diganggu.
