GitHub Repository
Boilerplate Minimal Go + Dodo Payments
Ikhtisar
Boilerplate Go adalah server Go minimal yang menjual produk Dodo Payments Anda dari halaman pricing. Server ini membuat checkout sessions, memverifikasi dan menangani webhooks, serta membuka Customer Portal. Clone sebagai titik awal untuk backend Go Anda sendiri.Boilerplate ini memerlukan Go 1.24.4 atau versi yang lebih baru, yaitu versi yang ditetapkan di
go.mod. Boilerplate ini menggunakan layout cmd, internal, dan templates, merender halaman pricing dengan template HTML Go, serta memanggil API Dodo Payments melalui SDK dodopayments-go.Fitur
- Setup Cepat: Clone repository, tambahkan API keys Anda ke
.env, lalu jalankan server denganmake run. - Integrasi Payment: Alur checkout yang membuat checkout sessions dengan SDK
dodopayments-go. - UI Modern: Halaman pricing bertema gelap yang dibuat dengan template HTML Go dan Tailwind CSS.
- Penanganan Webhook: Memverifikasi signature setiap webhook sebelum memproses event.
- Customer Portal: Pengelolaan subscription mandiri melalui Customer Portal.
- Praktik Terbaik Go: Layout project yang rapi dengan
cmd,internal, dantemplates. - Checkout Terisi Otomatis: Meneruskan nama dan email customer ke checkout, sehingga customer tidak perlu mengetikkannya lagi.
Prasyarat
Sebelum memulai, Anda memerlukan:- Go 1.24.4 atau versi yang lebih baru. Periksa versi Anda dengan
go version. - Akun Dodo Payments, untuk membuat API key dan webhook signing key di dashboard.
- Setidaknya satu produk, yang dibuat di bagian Products pada dashboard.
Memulai dengan Cepat
1
Clone the Repository
2
Install Dependencies
make install menjalankan go mod download lalu go mod tidy. Untuk mengunduh modules tanpa make, jalankan:3
Get API Credentials
Daftar di Dodo Payments, lalu salin kedua key dari dashboard:
- API Key: Developer → API Keys
- Webhook Key: Developer → Webhooks. Setiap webhook endpoint memiliki signing key sendiri. Untuk membuat endpoint yang dapat menjangkau server lokal Anda, lihat Testing Webhooks Locally.
4
Configure Environment Variables
Buat file Tetapkan nilai berikut di Server membaca variables ini saat startup:
.env di root project dari template:.env:.env
Server berhenti saat startup jika salah satu key yang diperlukan tidak ada.
.env.example menetapkan PORT dan DODO_PAYMENTS_RETURN_URL ke port 8080. Halaman ini menggunakan port 8000, jadi tetapkan keduanya ke 8000 seperti yang ditunjukkan, atau ganti 8000 dengan 8080 dalam commands di halaman ini.5
Add Your Products
Ganti sample product di
internal/lib/products.go dengan produk Anda. Salin setiap product ID dari Products di dashboard:Price hanya menetapkan price yang ditampilkan halaman pricing, dalam unit mata uang terkecil: 9999 ditampilkan sebagai $99.99. Checkout mengenakan price produk di Dodo Payments.6
Run the Development Server
make run membangun server menjadi bin/server lalu menjalankannya. Untuk menjalankan server tanpa membangun binary terlebih dahulu, jalankan:Anda akan melihat halaman pricing bertema gelap yang mencantumkan produk Anda dan siap digunakan untuk pembelian.
Struktur Project
Repository memiliki layout berikut:API Endpoints
Boilerplate ini menyertakan endpoint yang telah dikonfigurasi berikut:Kustomisasi
Memperbarui Informasi Produk
Editinternal/lib/products.go untuk mengubah:
- Product IDs (dari Products di dashboard Dodo Payments Anda)
- Nama
- Price yang ditampilkan di halaman pricing
- Fitur
- Deskripsi
/mo ke setiap price dan menampilkan Custom, bukan price, jika Price bernilai 100000 atau lebih. Untuk mengubahnya, edit templates/index.html.
Mengisi Data Customer Otomatis
Di.env, function handleCheckout mengirim data customer yang ditulis langsung ke /api/checkout. Ganti dengan data user yang sudah login:
handlePortal menggunakan kembali data customer ini dan menggunakan nama serta email sample yang sama sebagai fallback. Dalam app production, masukkan nilai ini dari sistem authentication Anda ke kedua function.
Event Webhook
internal/api/webhook.go memverifikasi setiap request dengan client.Webhooks.Unwrap dan key di DODO_PAYMENTS_WEBHOOK_KEY, lalu merutekan event berdasarkan type. Event-event ini memiliki handler, dan setiap handler mencatat data event:
Handler juga menerima
subscription.on_hold, subscription.failed, subscription.expired, dan subscription.plan_changed tanpa melakukan tindakan apa pun, serta mencatat setiap event type lainnya sebagai tidak ditangani. Handler merespons dengan 200 untuk setiap event yang terverifikasi. Untuk semua event type, lihat Webhook Event Guide.
Tambahkan business logic Anda ke function handler untuk:
- Memperbarui permission user di database Anda
- Mengirim email konfirmasi
- Menyediakan akses ke produk digital
- Melacak analytics dan metrics
Testing Webhook Secara Lokal
Dodo Payments tidak dapat menjangkaulocalhost. Untuk menerima webhook selama development, expose server lokal Anda dengan tunnel seperti ngrok:
/api/webhook:
DODO_PAYMENTS_WEBHOOK_KEY, lalu restart server.
Deployment
Build untuk Production
make build mengompilasi server menjadi bin/server:
make, jalankan:
Deploy ke Vercel
[.env ke pengaturan project Vercel, karena .env tidak ada di repository. Kemudian tetapkan webhook endpoint di dashboard ke https://yourdomain.com/api/webhook.
Docker
BuatDockerfile di root project. Build stage harus menggunakan Go 1.24.4 atau versi yang lebih baru agar sesuai dengan go.mod:
templates/ ke sebelah binary, karena server memuat template dari working directory. Build dan jalankan image:
PORT dari .env, jadi pertahankan PORT=8000 agar sesuai dengan port mapping.
Pertimbangan Production
Troubleshooting
Build errors or missing dependencies
Build errors or missing dependencies
Pastikan
go version melaporkan Go 1.24.4 atau versi yang lebih baru, lalu unduh modules lagi:Checkout session creation fails
Checkout session creation fails
Penyebab umum:
- Product ID tidak valid. Pastikan product ID tersebut ada di Products dalam mode yang sama dengan API key Anda.
- API key atau
DODO_PAYMENTS_ENVIRONMENTdi.envsalah. Key test mode memerlukantest_mode. - Untuk melihat error yang tepat, periksa server logs. Handler mencatat setiap request yang gagal sebelum mengembalikan
500.
Webhooks not receiving events
Webhooks not receiving events
Untuk pengujian lokal, expose server Anda dengan ngrok:Tetapkan webhook URL di Dodo Payments dashboard ke URL ngrok. Kemudian tetapkan
DODO_PAYMENTS_WEBHOOK_KEY di .env ke signing key endpoint tersebut. Jika server mencatat webhook verification failed, key tidak sesuai dengan endpoint.Templates not loading
Templates not loading
Server memuat
templates/base.html dan templates/index.html dari working directory. Jalankan server dari root project, atau ubah template paths di cmd/server/main.go.Pelajari Lebih Lanjut
Go SDK
Dokumentasi Go SDK lengkap
Webhooks Documentation
Pelajari semua event webhook dan praktik terbaik
Checkout Sessions
Pelajari secara mendalam konfigurasi checkout session
API Reference
Dokumentasi API Dodo Payments lengkap
Dukungan
Untuk mendapatkan bantuan terkait boilerplate:- Ajukan pertanyaan di komunitas Discord.
- Periksa repository GitHub untuk issue dan update.
- Hubungi tim support.