Skip to main content

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 dengan make 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, dan templates.
  • 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:
Buat kedua key dalam test mode selama pengembangan. Untuk beralih ke test mode, nonaktifkan switch Live Mode di sidebar dashboard.
4

Configure Environment Variables

Buat file .env di root project dari template:
Tetapkan nilai berikut di .env:
.env
Server membaca variables ini saat startup: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.
Jangan pernah commit file .env ke version control. .gitignore milik repository sudah mengecualikannya.
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:
Buka http://localhost:8000 untuk melihat halaman pricing Anda.
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

Edit internal/lib/products.go untuk mengubah:
  • Product IDs (dari Products di dashboard Dodo Payments Anda)
  • Nama
  • Price yang ditampilkan di halaman pricing
  • Fitur
  • Deskripsi
Template halaman pricing menambahkan suffix /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:
Function 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 menjangkau localhost. Untuk menerima webhook selama development, expose server lokal Anda dengan tunnel seperti ngrok:
Di Dodo Payments Dashboard, tambahkan endpoint dengan forwarding URL yang ditampilkan ngrok, diikuti /api/webhook:
Salin signing key endpoint ke DODO_PAYMENTS_WEBHOOK_KEY, lalu restart server.

Deployment

Build untuk Production

make build mengompilasi server menjadi bin/server:
Untuk build dan menjalankan binary tanpa make, jalankan:

Deploy ke Vercel

[ Deploy dengan Vercel ](https://vercel.com/new/clone?repository-url=https://github.com/dodopayments/go-boilerplate) Setelah melakukan deployment, tambahkan variables dari file .env ke pengaturan project Vercel, karena .env tidak ada di repository. Kemudian tetapkan webhook endpoint di dashboard ke https://yourdomain.com/api/webhook.

Docker

Buat Dockerfile di root project. Build stage harus menggunakan Go 1.24.4 atau versi yang lebih baru agar sesuai dengan go.mod:
Final image menyalin templates/ ke sebelah binary, karena server memuat template dari working directory. Build dan jalankan image:
Container listen pada nilai PORT dari .env, jadi pertahankan PORT=8000 agar sesuai dengan port mapping.

Pertimbangan Production

Sebelum melakukan deployment ke production:
  • Tetapkan DODO_PAYMENTS_ENVIRONMENT ke live_mode.
  • Gunakan API key live mode dari dashboard.
  • Arahkan webhook endpoint ke domain production Anda, dan gunakan signing key endpoint tersebut.
  • Tetapkan DODO_PAYMENTS_RETURN_URL ke halaman di domain production Anda.
  • Sajikan setiap endpoint melalui HTTPS.

Troubleshooting

Pastikan go version melaporkan Go 1.24.4 atau versi yang lebih baru, lalu unduh modules lagi:
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_ENVIRONMENT di .env salah. Key test mode memerlukan test_mode.
  • Untuk melihat error yang tepat, periksa server logs. Handler mencatat setiap request yang gagal sebelum mengembalikan 500.
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.
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:
Terakhir diubah pada 26 September 2026