Bắt đầu nhanh với SePay Webhooks

Tích hợp SePay Webhooks trong vài phút: tạo webhook đầu tiên, viết endpoint xử lý payload và kiểm tra bằng một giao dịch ngân hàng thật.

||
Cần test trước?

Dùng Test mode để thử webhook bằng giao dịch mô phỏng mà không cần chuyển tiền thật.

SePay gửi HTTP POST đến URL của bạn mỗi khi có giao dịch. Endpoint của bạn nhận request, xử lý xong rồi trả status 200.

1. Viết endpoint nhận webhook

Tổng quan luồng tích hợp

1
2
3
4
5
6
7
8
<?php
$payload = json_decode(file_get_contents('php://input'), true);
 
// Xử lý payload ở đây
 
header('Content-Type: application/json');
http_response_code(200);
echo json_encode(['success' => true]);

Deploy code lên một URL thực tế (có thể truy cập được từ Internet). Bắt buộc HTTPS khi chạy production, còn nếu chỉ test thì HTTP vẫn được.

2. Tạo webhook

Dashboard → WebhooksThêm webhook:

TrườngGiá trị
TênTuỳ ý
URLEndpoint vừa deploy
Loại giao dịchTất cả
Tài khoản ngân hàngTất cả tài khoản
Phương thức xác thựcKhông xác thực

Sau khi lưu, mở menu trên dòng webhook vừa tạo rồi bấm Gửi thử. Nếu kết quả là Thành công nghĩa là URL của bạn đã nhận được webhook.

3. Test với giao dịch thật

Chuyển một số tiền nhỏ (ví dụ 10.000₫) vào tài khoản ngân hàng bạn đã liên kết SePay. SePay gửi webhook đến endpoint của bạn trong vài giây.

Mở Lịch sử gửi rồi bấm dòng log mới nhất. Nếu Status hiện Thành công nghĩa là endpoint đã nhận webhook xong xuôi. Chuyển sang tab Request để xem payload (dữ liệu thực tế SePay gửi):

Payload
{
  "id": 92704,
  "gateway": "Vietcombank",
  "transactionDate": "2024-07-02 11:08:33",
  "accountNumber": "1017588888",
  "subAccount": "",
  "code": null,
  "content": "NGUYEN VAN A chuyen tien",
  "transferType": "in",
  "transferAmount": 10000,
  "accumulated": 105010000,
  "referenceCode": "FT24012345678"
}

Giải thích đầy đủ từng field: Tích hợp webhook.

Trước khi chạy production

Bật xác thực HMAC-SHA256, chống trùng lặp dùng trường id, và kiểm tra transferAmount trước khi xử lý. Xem Tích hợp webhook để biết đầy đủ.

Tiếp theo