Nhận và xác minh webhook OAuth

Nội dung Markdown đầy đủ của trang tài liệu.

# Nhận và xác minh webhook OAuth

Webhook đi qua bộ gửi Pay2S hiện có. Body JSON được chuyển tiếp nguyên bản, bao gồm các trường giao dịch mà nguồn cung cấp; xem [payload webhook người dùng](/docs/webhook/tai-lieu-ky-thuat/). OAuth dùng chữ ký riêng, không dùng Bearer token của webhook thông thường tại receiver đối tác:

```text
X-Pay2S-Timestamp: UNIX_SECONDS
X-Pay2S-Event-Id: STABLE_BODY_IDENTIFIER
X-Pay2S-Signature: HEX_HMAC_SHA256
```

Tính HMAC-SHA256 bằng signing secret trên chuỗi `timestamp + "." + raw_body`, so sánh constant-time và từ chối timestamp lệch quá 5 phút. Không stringify lại JSON trước khi xác minh. Chống xử lý trùng theo ID giao dịch; event ID chỉ ổn định khi toàn bộ body giống nhau. Trả HTTP 2xx sau khi lưu bền vững hoặc đưa vào hàng đợi. Timeout, redirect hoặc HTTP khác 2xx được chuyển thành lỗi để bộ gửi Pay2S xử lý retry theo cấu hình hiện tại.

Khách ngắt kết nối sẽ dừng token và webhook liên quan; các lượt đang chờ retry không được chuyển tiếp. Một request đã gửi ra trước thời điểm ngắt có thể vẫn hoàn tất. Access token hết hạn thông thường không dừng webhook nếu kết nối vẫn còn hiệu lực.


Tạo đăng ký webhook tại [API tạo webhook](/docs/oauth/webhooks-create/). Xem [payload webhook người dùng](/docs/webhook/tai-lieu-ky-thuat/) cho paymentCode, remitter và trường bổ sung. Receiver thử trong Webhook Inbox ghi nhận HTTP, không thay thế việc xác minh HMAC ở backend của bạn.