Chuyển đến nội dung chính

GitHub Repository

Mã nguồn hoàn chỉnh và hướng dẫn thiết lập
Khám phá bộ khởi động hoàn chỉnh cho supabase
Một bộ khởi động đăng ký tối giản được xây dựng bằng Next.js, Supabase và Dodo Payments. Boilerplate này giúp bạn nhanh chóng thiết lập một SaaS dựa trên đăng ký với xác thực, thanh toán và webhook.
Dodo Payments Supabase Subscription Starter

Thiết lập nhanh

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

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

Lấy ref dự án của bạn từ Bảng điều khiển Supabase → Cài đặt dự án

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

  1. Truy cập Supabase Dashboard
  2. Mở SQL Editor
  3. Tạo truy vấn mới
  4. Sao chép và dán toàn bộ nội dung của schema.sql
  5. Chạy truy vấn

4. Đặt Bí mật ban đầu

Supabase tự động cung cấp SUPABASE_URLSUPABASE_SERVICE_ROLE_KEY khi chạy.
Lưu ý: Chúng tôi sẽ thiết lập DODO_PAYMENTS_WEBHOOK_KEY sau khi triển khai khi bạn có URL webhook.

5. Triển khai

Hàm đã được thiết lập trong functions/webhook/index.ts - chỉ cần triển khai nó:

6. Lấy URL Webhook của bạn

URL webhook của bạn là:

7. Đăng ký Webhook trong Bảng điều khiển DodoPayments

  1. Truy cập DodoPayments Dashboard → Developer → Webhooks
  2. Tạo endpoint webhook mới
  3. Cấu hình URL webhook của bạn làm endpoint
  4. Bật các sự kiện đăng ký sau:
    • subscription.active
    • subscription.cancelled
    • subscription.renewed
  5. Sao chép Signing Secret

8. Đặt Khóa Webhook & Triển khai lại

Chức năng của nó

Xử lý các sự kiện đăng ký và lưu trữ chúng trong Supabase PostgreSQL:
  • subscription.active - Tạo/cập nhật hồ sơ khách hàng và đăng ký
  • subscription.cancelled - Đánh dấu đăng ký là đã hủy
  • subscription.renewed - Cập nhật ngày thanh toán tiếp theo

Tính năng chính

Xác minh chữ ký - Sử dụng thư viện dodopayments
Tính chất idempotent - Ngăn chặn xử lý trùng lặp bằng ID webhook
Ghi nhận sự kiện - Theo dõi đầy đủ trong bảng webhook_events
Xử lý lỗi - Được ghi lại và có thể thử lại
Lưu ý: Cài đặt này trình bày cách xử lý ba sự kiện đăng ký cốt lõi (subscription.active, subscription.cancelled, subscription.renewed) với các trường tối thiểu. Bạn có thể dễ dàng mở rộng để hỗ trợ các loại sự kiện và trường bổ sung theo yêu cầu của mình.

Tệp cấu hình

Sơ đồ Cơ sở dữ liệu

Các bảng được tạo:
  • customers - Email, tên, dodo_customer_id
  • subscriptions - Trạng thái, số tiền, next_billing_date, liên kết với khách hàng
  • webhook_events - Nhật ký sự kiện với webhook_id cho idempotency

Mã thực hiện

Cách hoạt động

Hàm Edge dựa trên Deno:
  1. Xác minh chữ ký - Sử dụng thư viện dodopayments để xác minh HMAC-SHA256
  2. Kiểm tra tính idempotent - Tra cứu ID webhook để ngăn chặn xử lý trùng lặp
  3. Ghi nhận sự kiện - Lưu dữ liệu webhook thô trong bảng webhook_events
  4. Xử lý cập nhật - Tạo hoặc cập nhật khách hàng và đăng ký thông qua client Supabase
  5. Xử lý lỗi - Ghi lại lỗi và đánh dấu sự kiện để thử lại

Kiểm tra

Phát triển cục bộ:
Cờ --no-verify-jwt là bắt buộc vì webhook không bao gồm token JWT. Bảo mật được cung cấp bởi việc xác minh chữ ký webhook.
Xem nhật ký:
Hoặc trong Bảng điều khiển Supabase → Chức năng Edge → webhook → tab Nhật ký Cấu hình trong Bảng điều khiển DodoPayments:
  1. Đi đến Nhà phát triển → Webhooks
  2. Thêm điểm cuối với URL Supabase của bạn
  3. Kích hoạt: subscription.active, subscription.cancelled, subscription.renewed

Vấn đề thường gặp

Tài nguyên

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