GitHub Repository
Kode sumber untuk boilerplate FastAPI dan Dodo Payments.
Ikhtisar
Boilerplate FastAPI adalah backend Python yang sudah terhubung ke Dodo Payments. Boilerplate ini memiliki endpoint untuk membuat checkout sessions dan Customer Portal sessions, endpoint webhook yang memverifikasi signature, serta halaman pricing yang dirender dari template Jinja2.Boilerplate ini menggunakan FastAPI dengan handler rute
async, Pydantic untuk validasi dan pengaturan, serta dodopayments Python SDK. Handler memanggil client sinkron DodoPayments. Untuk menghindari pemblokiran event loop, gunakan AsyncDodoPayments dan await panggilannya.Fitur
Boilerplate ini mencakup:- Penyiapan Cepat: Beralih dari proses clone ke server yang berjalan dalam sekitar lima menit.
- Handler Async: Handler rute adalah fungsi
async defFastAPI. - Checkout Sessions: Endpoint checkout yang telah dikonfigurasi dan menggunakan Python SDK.
- Penanganan Webhook: Endpoint webhook yang memverifikasi setiap signature dengan method
unwrapmilik SDK. - Customer Portal: Endpoint yang membuat Customer Portal sessions.
- Keamanan Tipe: Model Pydantic memvalidasi request body, dan kode menggunakan type hints.
- Konfigurasi Environment:
pydantic-settingsmemuat dan memvalidasi konfigurasi dari.env.
Prasyarat
Sebelum memulai, Anda memerlukan:- Python 3.9 atau yang lebih baru, yang diperlukan oleh
dodopaymentsSDK. Python 3.11 atau yang lebih baru direkomendasikan. - pip atau uv untuk manajemen paket.
- Akun Dodo Payments, untuk membuat API key dan webhook signing secret di dashboard.
Mulai Cepat
1
Clone the Repository
2
Create Virtual Environment
Siapkan environment Python yang terisolasi:Atau gunakan uv untuk manajemen dependensi yang lebih cepat:
3
Install Dependencies
4
Get API Credentials
Daftar di Dodo Payments, lalu dapatkan kredensial Anda dari dashboard:
- API Key: Buat key di Dashboard → Developer → API Keys.
- Webhook Key: Tambahkan endpoint di Dashboard → Developer → Webhooks, lalu salin signing secret-nya. URL endpoint harus bersifat publik dan menggunakan HTTPS. Untuk menerima event di mesin Anda, lihat Menguji Webhook Secara Lokal.
5
Configure Environment Variables
Salin file contoh untuk membuat file Atur nilainya ke kredensial Dodo Payments Anda:Keempat variabel wajib diisi.
.env di direktori root:.env
app/core/config.py memuatnya dengan pydantic-settings, dan aplikasi gagal dimulai jika salah satunya tidak ada atau kosong. DODO_PAYMENTS_RETURN_URL adalah tempat checkout mengarahkan pelanggan setelah pembayaran.6
Add Your Products
Ganti produk contoh di
app/lib/products.py dengan produk Anda sendiri. Atur setiap product_id ke ID produk di bagian Products pada dashboard Anda. Halaman pricing akan menampilkan produk-produk ini.7
Run the Development Server
Swagger UI mencantumkan endpoint
/api/checkout/, /api/webhook/, dan /api/customer-portal/ yang siap diuji.http://localhost:8000, menampilkan halaman pricing.Struktur Proyek
Endpoint API
app/main.py memasang setiap router di bawah prefix /api:
Setiap path diakhiri dengan garis miring. FastAPI menjawab request ke path tanpa garis miring dengan redirect
307, jadi gunakan path yang tepat, terutama dalam URL webhook Anda.
Contoh Kode
Contoh-contoh ini diringkas dari file-file diapp/api/.
Membuat Checkout Session
app/api/checkout.py membuat checkout session dan mengembalikan checkout_url. Request body menerima product_id, quantity opsional, dan objek customer opsional dengan name dan email:
Menangani Webhook
app/api/webhook.py memverifikasi signature dengan method unwrap milik SDK, lalu memilih cabang berdasarkan tipe event:
Integrasi Customer Portal
app/api/portal.py membuat session Customer Portal untuk ID customer dan mengembalikan link portal sebagai url:
app/templates/index.html mengirim ID customer hardcoded (cus_001) ke endpoint ini, serta nama dan email hardcoded ke endpoint checkout. Ganti nilai-nilai tersebut dengan nilai pengguna yang sudah sign in.
Event Webhook
Handler diapp/api/webhook.py memilih cabang berdasarkan event berikut:
Untuk menangani event lain, tambahkan cabang untuk tipenya, seperti
refund.succeeded untuk refund yang berhasil diproses. Untuk setiap tipe event, lihat Panduan Event Webhook.
Tambahkan business logic Anda di dalam webhook handler untuk:
- Memperbarui permission pengguna di database Anda
- Mengirim email konfirmasi
- Menyediakan akses ke produk digital
- Melacak analytics dan metrics
Menguji Webhook Secara Lokal
Dodo Payments tidak dapat menjangkaulocalhost. Untuk pengembangan lokal, gunakan tool seperti ngrok untuk mengekspos server lokal Anda:
/api/webhook/, sebagai endpoint di Dodo Payments Dashboard Anda:
DODO_PAYMENTS_WEBHOOK_KEY di .env, lalu mulai ulang server. Aplikasi hanya membaca .env saat startup.
Deployment
Docker
Repository ini tidak menyertakanDockerfile. Untuk menjalankan aplikasi dalam container, tambahkan Dockerfile ini ke root repository:
COPY . . menyalin setiap file dalam build context, termasuk .env. Agar key Anda tidak masuk ke image, tambahkan file .dockerignore yang mencantumkan .env. Kemudian build image dan jalankan dengan environment file Anda:
Pertimbangan Produksi
Pemecahan Masalah
Import errors or missing modules
Import errors or missing modules
Pastikan virtual environment Anda aktif dan dependencies sudah terpasang:
Server fails to start with Directory 'app/static' does not exist
Server fails to start with Directory 'app/static' does not exist
app/main.py menyajikan file statis dari app/static, tetapi repository tidak menyertakan direktori tersebut. Buat direktori itu dengan mkdir app/static, lalu mulai ulang server.Checkout session creation fails
Checkout session creation fails
Periksa penyebab umum berikut:
- Product ID tidak ada di dashboard Dodo Payments Anda.
- API key atau
DODO_PAYMENTS_ENVIRONMENTdi.envsalah. Key test mode hanya berfungsi dengantest_mode.
400. Periksa log FastAPI untuk pesan error yang lebih terperinci.Webhooks not receiving events
Webhooks not receiving events
Untuk pengujian lokal, gunakan ngrok untuk mengekspos server Anda:Di dashboard Dodo Anda, tambahkan endpoint dengan URL ngrok yang diikuti
/api/webhook/, termasuk garis miring penutup. Salin signing secret endpoint tersebut ke DODO_PAYMENTS_WEBHOOK_KEY dalam file .env Anda.Webhook signature verification fails
Webhook signature verification fails
- Pastikan
DODO_PAYMENTS_WEBHOOK_KEYdi.envcocok dengan signing secret endpoint. - Verifikasi signature terhadap raw request body, sebelum Anda mem-parsing-nya sebagai JSON.
- Teruskan ketiga header
webhook-id,webhook-timestamp, danwebhook-signaturekeclient.webhooks.unwrap(). Signature Standard Webhooks mencakupid.timestamp.body, bukan body saja.
Pelajari Lebih Lanjut
Python SDK
Dokumentasi Python SDK lengkap dengan dukungan async
Webhooks Documentation
Pelajari semua event webhook dan praktik terbaik
Checkout Sessions
Pelajari secara mendalam konfigurasi checkout session
API Reference
Dokumentasi Dodo Payments API lengkap
Dukungan
Untuk bantuan terkait boilerplate:- Ajukan pertanyaan di komunitas Discord.
- Laporkan masalah dan ikuti pembaruan di repository GitHub.
- Kirim email ke tim dukungan.