Skip to main content

Tổng quan

Boilerplate tối giản Astro là một ứng dụng khởi đầu đã được kết nối với Dodo Payments. Thêm API keys và product IDs của bạn để có một trang định giá mở checkout, một webhook endpoint cho các sự kiện thanh toán và một liên kết đến Customer Portal.
Boilerplate này sử dụng Astro 5 với TypeScript, Tailwind CSS 4 và adaptor @dodopayments/astro. Để thêm các API routes tương tự vào một ứng dụng hiện có, hãy xem Astro Adaptor.

Tính năng

Boilerplate bao gồm:
  • Thiết lập nhanh: Từ lúc clone đến khi có trang định giá đang chạy trong khoảng năm phút.
  • Checkout: Luồng checkout được cấu hình sẵn, xây dựng trên @dodopayments/astro.
  • Trang định giá: Trang định giá với giao diện tối, được tạo kiểu bằng Tailwind CSS.
  • Trình xử lý Webhook: Endpoint xác minh chữ ký của từng webhook và chạy code của bạn cho sự kiện đó.
  • Customer Portal: Liên kết trong header mở Customer Portal, nơi khách hàng quản lý các subscription của họ.
  • TypeScript: Định nghĩa product và handler có kiểu.
  • Checkout điền sẵn: Truyền tên và email của khách hàng đến checkout để khách hàng không phải nhập lại.

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

Trước khi bắt đầu, bạn cần:
  • Một phiên bản Node.js LTS, phiên bản mà Astro 5 yêu cầu.
  • Một tài khoản Dodo Payments, để tạo API key và webhook signing secret trong dashboard.

Bắt đầu nhanh

1

Clone the Repository

2

Install Dependencies

3

Get API Credentials

Đăng ký tại Dodo Payments, sau đó lấy thông tin xác thực của bạn từ dashboard:
Tạo cả hai khi công tắc Live Mode trong sidebar đang tắt. Key ở test mode chỉ hoạt động với DODO_PAYMENTS_ENVIRONMENT=test_mode và các khoản thanh toán ở test mode không làm phát sinh giao dịch tiền thật.
4

Configure Environment Variables

Sao chép file mẫu để tạo file .env trong thư mục gốc:
Đặt các giá trị thành thông tin xác thực Dodo Payments của bạn:
.env.example đặt DODO_PAYMENTS_RETURN_URL thành port 3000. Hãy đổi thành 4321, port mà Astro dev server sử dụng, để checkout chuyển khách hàng trở lại ứng dụng của bạn.Các API routes đọc những biến này:
  • DODO_PAYMENTS_API_KEY xác thực các route checkout và Customer Portal.
  • DODO_PAYMENTS_WEBHOOK_KEY xác minh webhook signatures.
  • DODO_PAYMENTS_RETURN_URL là nơi checkout gửi khách hàng đến sau khi thanh toán.
  • DODO_PAYMENTS_ENVIRONMENT là test_mode hoặc live_mode.
Không commit file .env vào version control. .gitignore của repository đã loại trừ file này.
5

Add Your Products

Thay thế các product mẫu trong src/lib/products.ts bằng product của bạn. Đặt mỗi product_id thành ID của một product trong Products trên dashboard của bạn:
Trang định giá hiển thị name, description, price và features từ file này. Checkout tính phí theo mức giá được đặt trên product trong Dodo Payments, vì vậy hãy đảm bảo price luôn đồng bộ với mức giá đó.
6

Run the Development Server

Mở http://localhost:4321 để xem trang định giá của bạn.

Cấu trúc dự án

Các API routes của checkout, Customer Portal và webhook nằm trong src/pages/api/:

Tùy chỉnh

Cập nhật thông tin product

Chỉnh sửa src/lib/products.ts để thay đổi:
  • Product IDs, lấy từ Products trong dashboard Dodo Payments của bạn
  • Prices
  • Features
  • Descriptions

Điền sẵn dữ liệu khách hàng

Script checkout trong src/components/ProductCard.astro gửi tên và email được ghi cứng trong mỗi checkout request. Hãy thay thế chúng bằng thông tin của người dùng đã đăng nhập:

Cập nhật Customer Portal

Liên kết Customer Portal trong src/components/Header.astro mở /api/customer-portal với customer ID được ghi cứng. Hãy thay thế bằng customer ID từ authentication system hoặc database của bạn:
Để lấy customer ID dùng cho việc kiểm thử, hãy hoàn tất một giao dịch mua thử nghiệm, sau đó sao chép customer ID từ Customers trong dashboard.

Webhook Events

Handler trong src/pages/api/webhook.ts xác minh từng request bằng DODO_PAYMENTS_WEBHOOK_KEY, sau đó xử lý hai sự kiện:
  • onSubscriptionActive chạy khi một subscription trở thành active (subscription.active).
  • onSubscriptionCancelled chạy khi một subscription bị cancelled (subscription.cancelled).
Thêm business logic của bạn vào các handler này:
Để xử lý nhiều sự kiện hơn, hãy thêm các handler tương ứng, chẳng hạn như onPaymentSucceeded. Astro Adaptor liệt kê mọi handler được hỗ trợ. Dodo Payments không thể truy cập localhost. Để phát triển cục bộ, hãy sử dụng tunnel như ngrok để công khai local server của bạn và dùng tunnel URL làm webhook endpoint.

Triển khai

Astro build các trang thành static output và mỗi API route đặt export const prerender = false để render theo yêu cầu. Các route theo yêu cầu cần một Astro adapter cho deployment platform của bạn: Với các platform khác, hãy xem hướng dẫn deployment của Astro. Trong hosting platform của bạn, thêm bốn environment variables và đặt DODO_PAYMENTS_RETURN_URL thành production URL của bạn.

Cập nhật Webhook URL

Sau khi triển khai, hãy thêm production webhook URL trong Dodo Payments Dashboard:
Mỗi endpoint có signing secret riêng. Đặt DODO_PAYMENTS_WEBHOOK_KEY trong production environment thành signing secret của endpoint này.

Khắc phục sự cố

Xóa node_modules và package-lock.json, sau đó cài đặt lại dependencies:
Kiểm tra các nguyên nhân phổ biến sau:
  • Product ID không tồn tại trong dashboard Dodo Payments của bạn.
  • API key hoặc DODO_PAYMENTS_ENVIRONMENT trong .env không đúng. Key ở test mode chỉ hoạt động với test_mode.
Tìm lỗi trong browser console và terminal đang chạy npm run dev.
Để kiểm thử cục bộ, hãy sử dụng ngrok để công khai server của bạn:
Trong Dodo dashboard của bạn, thêm một endpoint với HTTPS URL của ngrok, theo sau là /api/webhook. Sao chép signing secret của endpoint đó vào DODO_PAYMENTS_WEBHOOK_KEY trong file .env của bạn.
Các API routes render theo yêu cầu và repository không bao gồm deployment adapter. Hãy cài đặt Astro adapter cho platform của bạn trước khi build cho production.Xem hướng dẫn deployment của Astro để biết thêm chi tiết.

Tìm hiểu thêm

Hỗ trợ

Để được trợ giúp về boilerplate:
Lần sửa đổi cuối 26 tháng 9, 2026