@dodopayments/hono memberi aplikasi Hono Anda tiga handler rute: Checkout mengembalikan URL checkout, CustomerPortal mengarahkan customer ke Customer Portal, dan Webhooks memverifikasi request webhook serta memanggil event handler Anda.
Checkout Handler
Buat payment link dan sesi checkout dari aplikasi Hono Anda.
Customer Portal
Biarkan customer mengelola subscription dan detail mereka.
Webhooks
Verifikasi dan proses event webhook Dodo Payments.
Instalasi
1
Install the Package
Jalankan perintah berikut di root project Anda:Paket ini memerlukan Hono 4.8.9 atau yang lebih baru.
2
Set Up Environment Variables
Buat file Buat API key di Developer → API Keys. Tambahkan endpoint webhook Anda di Developer → Webhooks dan salin signing secret-nya ke
.env di root project Anda:DODO_PAYMENTS_WEBHOOK_KEY. Selama pengembangan, gunakan API key test mode dengan DODO_PAYMENTS_ENVIRONMENT=test_mode, karena test mode key hanya berfungsi pada test mode. DODO_PAYMENTS_RETURN_URL bersifat opsional.Contoh Handler Rute
Contoh-contoh ini mendaftarkan rute pada aplikasi Hono yang dibuat dengan
new Hono(). Handler membaca request body sendiri, sehingga tidak memerlukan middleware body-parsing.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Gunakan handler ini untuk mengintegrasikan checkout Dodo Payments ke aplikasi Hono Anda. Mendukung flow static (GET), dynamic (POST), dan session (POST). Daftarkan setiap flow POST pada path-nya sendiri, karena Hono berhenti pada handler pertama yang berjalan untuk suatu request.
Handler Rute Checkout
Adaptor ini mendukung ketiga flow checkout Dodo Payments. Atur
type dalam konfigurasi handler untuk memilih flow yang dilayani oleh suatu rute. Setiap flow merespons dengan JSON yang berisi checkout_url untuk dibuka oleh customer.- Static Payment Links:
type: "static", GET. Membuat payment link untuk satu produk dari query parameter, setelah memeriksa bahwa produk tersebut ada. - Dynamic Payment Links:
type: "dynamic", POST. Membuat pembayaran satu kali atau subscription dengan payment link, bergantung pada apakah produk tersebut recurring. - Checkout Sessions:
type: "session", POST. Membuat sesi checkout dari keranjang produk dan detail customer. Gunakan flow ini untuk integrasi baru.
Checkout menerima opsi berikut:
Daftarkan handler untuk GET ketika
type adalah static, dan untuk POST ketika type adalah dynamic atau session. Handler memperlakukan setiap request yang bukan POST sebagai request checkout static.
Static Checkout (GET)
Static Checkout (GET)
Query Parameter yang Didukung
string
wajib
Identifier produk, misalnya
?productId=pdt_nZuwz45WAs64n3l07zpQR.integer
default:"1"
Jumlah produk.
string
Nama lengkap customer. Diabaikan jika
firstName atau lastName diberikan.string
Nama depan customer.
string
Nama belakang customer.
string
Alamat email customer.
string
Negara customer, sebagai kode ISO 3166-1 alpha-2.
string
Alamat jalan customer.
string
Kota customer.
string
Negara bagian atau provinsi customer.
string
Kode pos atau ZIP customer.
boolean
Atur ke
true untuk menonaktifkan field nama lengkap.boolean
Atur ke
true untuk menonaktifkan field nama depan.boolean
Atur ke
true untuk menonaktifkan field nama belakang.boolean
Atur ke
true untuk menonaktifkan field email.boolean
Atur ke
true untuk menonaktifkan field negara.boolean
Atur ke
true untuk menonaktifkan field baris alamat.boolean
Atur ke
true untuk menonaktifkan field kota.boolean
Atur ke
true untuk menonaktifkan field negara bagian.boolean
Atur ke
true untuk menonaktifkan field kode ZIP.string
Mata uang pembayaran, misalnya
USD.boolean
default:"true"
Tampilkan atau sembunyikan pemilih mata uang.
number
Menetapkan jumlah yang dibebankan, dalam unit utama mata uang, misalnya
12.5 untuk $12.50. Hanya berfungsi dengan produk Pay What You Want dan diabaikan jika nilainya di bawah harga minimum produk.boolean
default:"true"
Tampilkan atau sembunyikan bagian diskon.
string
Query parameter apa pun yang diawali
metadata_ diteruskan ke checkout sebagai metadata, misalnya metadata_orderId=123.true dan field yang sesuai memiliki nilai, misalnya email dengan disableEmail. Handler meneruskan parameter ini ke static payment link.Format Response
Checkout static mengembalikan response JSON dengan URL checkout:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- Kirim parameter sebagai JSON body dalam request POST.
- Mendukung pembayaran satu kali dan recurring. Handler mengambil produk, lalu membuat subscription jika produk tersebut recurring, atau pembayaran satu kali jika tidak.
- Body memerlukan
billing(denganstreet,city,state,country, danzipcode) sertacustomer, ditambahproduct_id(denganquantityopsional) atauproduct_cart. Subscription memerlukanproduct_id. - Handler juga meneruskan
metadata,allowed_payment_method_types,billing_currency,discount_codes(ataudiscount_codeyang deprecated),return_url,show_saved_payment_methods, dantax_id. Untuk subscription, handler juga meneruskanaddons,on_demand, dantrial_period_days. Field lainnya diabaikan. - Untuk detail field, lihat:
Format Response
Checkout dynamic mengembalikan response JSON dengan payment link sebagai URL checkout:Checkout Sessions (POST)
Checkout Sessions (POST)
Kirim payload checkout session sebagai JSON body. Handler membuat checkout session yang menangani seluruh flow pembayaran untuk pembelian satu kali dan subscription, lalu mengembalikan
checkout_url. product_cart wajib diisi dan harus berisi setidaknya satu produk.Setiap checkout_url hanya dapat digunakan sekali dan kedaluwarsa setelah 24 jam, atau setelah 15 menit jika Anda memberikan confirm: true. Session yang dibuat dengan payment_method_id tidak mengembalikan checkout_url, sehingga handler merespons dengan 400.Lihat Checkout Sessions Integration Guide untuk detail lebih lanjut dan daftar lengkap field yang didukung.Format Response
Checkout session mengembalikan response JSON dengan URL checkout:Handler Rute Customer Portal
Handler Rute Customer Portal membuat session Customer Portal untuk customer dalamcustomer_id dan mengarahkan request ke link portal. CustomerPortal menerima opsi bearerToken dan environment, sama seperti Checkout. Jika Dodo Payments tidak dapat membuat session, handler mengembalikan 500.
Query Parameter
string
wajib
ID customer untuk session portal, misalnya
?customer_id=cus_123.boolean
Jika diatur ke
true, email berisi link portal akan dikirim kepada customer.Handler Rute Webhook
Handler webhook memverifikasi setiap request menggunakan secret webhook Anda, yang diteruskan sebagaiwebhookKey, lalu memanggil event handler Anda. Handler membaca raw request body sendiri, sehingga rute tidak memerlukan middleware body-parsing.
- Method: Hanya request POST yang didukung. Method lainnya mengembalikan 405.
- Signature Verification: Memverifikasi header
webhook-id,webhook-timestamp, danwebhook-signaturedenganwebhookKey, sesuai spesifikasi Standard Webhooks. Mengembalikan 401 jika verifikasi gagal. - Payload Validation: Divalidasi dengan Zod. Mengembalikan 400 untuk payload yang tidak valid.
- Error Handling:
- 401: Signature tidak valid
- 400: Payload tidak valid
- 500: Error internal selama verifikasi
- Event Routing: Memanggil
onPayloaduntuk setiap event, lalu handler untuk tipe event tersebut, dan mengembalikan 200 setelah semuanya selesai. Handler tidak menangkap error yang dilempar oleh event handler Anda.