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:
- API Key: Tạo key trong Dashboard → Developer → API Keys.
- Webhook Key: Thêm endpoint trong Dashboard → Developer → Webhooks, sau đó sao chép signing secret của endpoint. URL của endpoint phải ở chế độ public và sử dụng HTTPS. Để nhận các sự kiện trên máy của bạn, hãy xem Webhook Events.
4
Configure Environment Variables
Sao chép file mẫu để tạo file Đặt các giá trị thành thông tin xác thực Dodo Payments của bạn:
.env trong thư mục gốc:.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_KEYxác thực các route checkout và Customer Portal.DODO_PAYMENTS_WEBHOOK_KEYxác minh webhook signatures.DODO_PAYMENTS_RETURN_URLlà nơi checkout gửi khách hàng đến sau khi thanh toán.DODO_PAYMENTS_ENVIRONMENTlàtest_modehoặclive_mode.
5
Add Your Products
Thay thế các product mẫu trong Trang định giá hiển thị
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: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
Cấu trúc dự án
Các API routes của checkout, Customer Portal và webhook nằm trongsrc/pages/api/:
Tùy chỉnh
Cập nhật thông tin product
Chỉnh sửasrc/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 trongsrc/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 trongsrc/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:
Webhook Events
Handler trongsrc/pages/api/webhook.ts xác minh từng request bằng DODO_PAYMENTS_WEBHOOK_KEY, sau đó xử lý hai sự kiện:
onSubscriptionActivechạy khi một subscription trở thành active (subscription.active).onSubscriptionCancelledchạy khi một subscription bị cancelled (subscription.cancelled).
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 đặtexport 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:DODO_PAYMENTS_WEBHOOK_KEY trong production environment thành signing secret của endpoint này.
Khắc phục sự cố
Module not found or build errors
Module not found or build errors
Xóa
node_modules và package-lock.json, sau đó cài đặt lại dependencies:Checkout redirect fails
Checkout redirect fails
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_ENVIRONMENTtrong.envkhông đúng. Key ở test mode chỉ hoạt động vớitest_mode.
npm run dev.Webhooks not receiving events
Webhooks not receiving events
Để 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.Customer portal link doesn't work
Customer portal link doesn't work
Thay
CUSTOMER_ID được ghi cứng trong src/components/Header.astro bằng ID của một customer trong dashboard Dodo Payments của bạn.Trong production, thay vào đó hãy lấy customer ID từ authentication system và database của bạn.Build fails with adapter error
Build fails with adapter error
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
- Tài liệu Dodo Payments
- Tài liệu Checkout Sessions
- Tài liệu Webhooks
- Astro Adaptor: các tùy chọn cho các handler
Checkout,CustomerPortalvàWebhooks - Tài liệu Astro
Hỗ trợ
Để được trợ giúp về boilerplate:- Đặt câu hỏi trong cộng đồng Discord.
- Báo cáo vấn đề và theo dõi cập nhật trong repository GitHub.
- Gửi email cho đội ngũ hỗ trợ.