Skip to main content

GitHub Repository

Mã nguồn hoàn chỉnh và hướng dẫn thiết lập
Hãy xem Dodo Payments Supabase Subscription Starter — boilerplate hoàn chỉnh cho Next.js, Supabase và Dodo Payments với tính năng xác thực, thanh toán và webhook.

Thiết lập nhanh

1. Điều kiện tiên quyết

Bạn cần:
  • Một tài khoản Supabase đã tạo project
  • API key của Dodo Payments từ Developer → API Keys trong dashboard

2. Xác thực & Liên kết

Tìm project ref của bạn trong Project Settings trên dashboard Supabase.

3. Thiết lập cơ sở dữ liệu

  1. Truy cập dashboard Supabase.
  2. Mở SQL Editor.
  3. Sao chép toàn bộ nội dung của schema.sql và chạy nội dung đó.

4. Thiết lập Secret ban đầu

Supabase tự động cung cấp SUPABASE_URL và SUPABASE_SERVICE_ROLE_KEY trong thời gian chạy.
Bạn sẽ thiết lập DODO_PAYMENTS_WEBHOOK_KEY sau khi triển khai, khi đã có URL webhook.

5. Triển khai

Function đã được thiết lập sẵn trong functions/webhook/index.ts.

6. Lấy URL Webhook

URL webhook của bạn là:

7. Đăng ký Webhook trong Dashboard Dodo Payments

  1. Truy cập Developer → Webhooks trong dashboard Dodo Payments.
  2. Nhấp vào Add endpoint.
  3. Nhập URL webhook của bạn.
  4. Chọn các event sau: subscription.active, subscription.cancelled, subscription.renewed.
  5. Nhấp vào Create endpoint và sao chép signing secret.

8. Thiết lập Webhook Key & Triển khai lại

Chức năng

Webhook handler xử lý các event subscription và lưu chúng vào Supabase PostgreSQL:
  • subscription.active — Tạo hoặc cập nhật bản ghi customer và subscription
  • subscription.cancelled — Đánh dấu subscription đã bị hủy
  • subscription.renewed — Cập nhật ngày billing tiếp theo

Tính năng chính

  • Xác minh chữ ký — Sử dụng SDK Dodo Payments để xác minh tính xác thực của webhook
  • Idempotency — Sử dụng header webhook-id để ngăn xử lý trùng lặp
  • Ghi nhật ký event — Lưu tất cả event trong bảng webhook_events để phục vụ việc kiểm toán
  • Xử lý lỗi — Ghi log các lỗi và đánh dấu event để thử lại
Ví dụ này xử lý ba event subscription cốt lõi với số trường tối thiểu. Bạn có thể mở rộng để hỗ trợ các loại event và trường bổ sung tùy theo nhu cầu.

Các tệp cấu hình

Database Schema

Các bảng được tạo:
  • customers — Email, tên và customer ID của Dodo Payments
  • subscriptions — Trạng thái, số tiền, ngày billing tiếp theo, được liên kết với customer
  • webhook_events — Nhật ký event với webhook ID để đảm bảo idempotency

Code triển khai

Cách hoạt động

Edge Function dựa trên Deno:
  1. Xác minh chữ ký — Sử dụng SDK Dodo Payments để xác minh HMAC-SHA256
  2. Kiểm tra bản ghi trùng lặp — Sử dụng header webhook-id để ngăn xử lý trùng lặp
  3. Ghi nhật ký event — Lưu dữ liệu webhook thô vào bảng webhook_events
  4. Xử lý cập nhật — Tạo hoặc cập nhật customer và subscription thông qua Supabase client
  5. Xử lý lỗi — Ghi log các lỗi và đánh dấu event để thử lại

Kiểm thử

Phát triển cục bộ:
Cờ --no-verify-jwt là bắt buộc vì webhook không chứa JWT token. Bảo mật được cung cấp thông qua việc xác minh chữ ký webhook.
Xem log:
Hoặc trong dashboard Supabase tại Edge Functions → webhook → Logs. Cấu hình trong dashboard Dodo Payments:
  1. Truy cập Developer → Webhooks.
  2. Thêm một endpoint với URL Supabase của bạn.
  3. Chọn subscription.active, subscription.cancelled và subscription.renewed.

Các vấn đề thường gặp

Tài nguyên

Lần sửa đổi cuối 26 tháng 9, 2026