> ## Documentation Index
> Fetch the complete documentation index at: https://ifdocdemo.lumivescence.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook

> Nhận một sự kiện có chữ ký khi một giao dịch thay đổi. Kiểm tra chữ ký, và chỉ xử lý mỗi sự kiện một lần.

Nhận một sự kiện có chữ ký trên server của bạn khi một giao dịch thay đổi. Dùng webhook để xác nhận một khoản thanh toán mà server của bạn không thấy hoàn tất, ví dụ khi quyết toán lỗi hoặc một response bị mất.

Webhook bao gồm mọi giao dịch của tài khoản Seller của bạn. Điều này gồm khoản thanh toán từ người mua InFlow và từ người mua khác.

## Thêm endpoint

Thêm endpoint webhook của bạn trong dashboard InFlow của tài khoản Seller, trên trang **Webhooks**. Tài khoản sandbox và tài khoản production tách biệt nhau. Thêm một endpoint trong mỗi tài khoản.

## Sự kiện

| Sự kiện | Khi nào InFlow gửi sự kiện |
| - | - |
| `TRANSACTION_CREATED` | InFlow ghi nhận một giao dịch mới. |
| `TRANSACTION_UPDATED` | Một giao dịch thay đổi. |

InFlow chỉ ghi nhận một số khoản thanh toán khi chúng quyết toán. Với các khoản thanh toán này, bạn chỉ nhận `TRANSACTION_UPDATED`.

## Đọc trạng thái

`data.status` cho biết trạng thái của giao dịch.

| Trạng thái | Ý nghĩa |
| - | - |
| `SETTLED` | Khoản thanh toán MPP hoặc x402 đã quyết toán. Đây là kết quả xác nhận duy nhất. |
| `INITIATED`, `PENDING`, `PROCESSING` | Khoản thanh toán chưa hoàn tất. |
| Mọi giá trị khác | Coi khoản thanh toán là chưa thanh toán. |

## Kiểm tra chữ ký

1. Đọc header `x-signature`. Header này có dạng `t=<timestamp>,v1=<digest>`.
2. Tính HMAC-SHA256 của `<timestamp>.<raw body>` bằng secret webhook của bạn.
3. So sánh kết quả của bạn với `v1`. Dùng phép so sánh constant-time.
4. Từ chối request nếu timestamp lệch quá 5 phút so với giờ của server.

Dùng body thô của request. Không phân tích JSON trước khi bạn kiểm tra chữ ký.

## Gửi lại

Nếu endpoint của bạn không trả về trạng thái `2xx`, InFlow gửi lại sự kiện. InFlow cũng gửi lại sau một lỗi mạng. InFlow gửi lại tối đa 11 lần. Lần gửi lại đầu tiên là sau 1 phút. Mỗi khoảng chờ dài gấp hai lần khoảng chờ trước đó.

InFlow không đi theo chuyển hướng. Mỗi lần gửi lại có một timestamp chữ ký mới.

## Trùng lặp và thứ tự

Mỗi lần gửi lại có cùng `eventId`. Chỉ xử lý mỗi `eventId` một lần. Các sự kiện có thể đến theo thứ tự khác với thứ tự của các thay đổi.

## Bước tiếp theo

> [card] [Phí và rút tiền](https://ifdocdemo.lumivescence.com/vi/sellers/fees-and-payouts.md)
>
> Đọc InFlow thu phí gì và cách bạn nhận tiền.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.