@dodopayments/nextjs menyediakan tiga route handler untuk project Next.js App Router Anda. Checkout mengembalikan URL checkout, CustomerPortal mengarahkan customer ke Customer Portal, dan Webhooks memverifikasi event webhook serta meneruskannya ke code Anda. Package ini mendukung Next.js 14, 15, dan 16.
Checkout Handler
Buat URL checkout dengan flow static, dynamic, dan checkout session.
Customer Portal
Biarkan customer mengelola subscription dan detail mereka.
Webhooks
Terima dan proses event webhook Dodo Payments.
Instalasi
1
Install the Package
Jalankan command ini di root project Anda:Package ini juga memerlukan Zod 3.25 atau Zod 4 sebagai peer dependency.
2
Set Up Environment Variables
Buat file
.env di root project Anda. Buat API key di Developer → API Keys dan webhook secret di Developer → Webhooks pada dashboard:DODO_PAYMENTS_RETURN_URL adalah tempat customer diarahkan setelah checkout. Jika Anda tidak meneruskan environment, handler akan menggunakan live_mode.Contoh Route Handler
Semua contoh mengasumsikan Anda menggunakan Next.js App Router.
- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Gunakan handler ini untuk menambahkan checkout Dodo Payments ke app Anda. Handler
GET menyediakan checkout static. Handler POST menyediakan checkout session, atau checkout dynamic saat Anda menetapkan type: "dynamic".Checkout Route Handler
Checkout handler mendukung ketiga cara menerima pembayaran dengan Dodo Payments:- Static Payment Links: URL yang dapat dibagikan untuk menerima pembayaran tanpa code.
- Dynamic Payment Links: Payment link yang Anda buat dengan detail khusus. Link ini menggunakan endpoint yang sudah deprecated.
- Checkout Sessions: Hosted checkout dengan keranjang product, detail customer, dan opsi customization. Ini adalah flow yang direkomendasikan.
Static Checkout (GET)
Static Checkout (GET)
Query Parameters yang Didukung
string
wajib
Identifier product, misalnya
?productId=pdt_123.integer
default:"1"
Quantity product.
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 code ISO 3166-1 alpha-2.
string
Baris alamat customer.
string
Kota customer.
string
Negara bagian atau provinsi customer.
string
ZIP atau kode pos customer.
boolean
Tetapkan ke
true untuk menonaktifkan field nama lengkap.boolean
Tetapkan ke
true untuk menonaktifkan field nama depan.boolean
Tetapkan ke
true untuk menonaktifkan field nama belakang.boolean
Tetapkan ke
true untuk menonaktifkan field email.boolean
Tetapkan ke
true untuk menonaktifkan field negara.boolean
Tetapkan ke
true untuk menonaktifkan field baris alamat.boolean
Tetapkan ke
true untuk menonaktifkan field kota.boolean
Tetapkan ke
true untuk menonaktifkan field negara bagian.boolean
Tetapkan ke
true untuk menonaktifkan field kode ZIP.string
Currency pembayaran, misalnya
USD.boolean
default:"true"
Tampilkan atau sembunyikan pemilih currency.
number
Menetapkan jumlah yang dibebankan, dalam unit utama currency, misalnya
12.5 untuk $12.50. Hanya berfungsi pada product Pay What You Want dan diabaikan jika nilainya di bawah harga minimum product.boolean
default:"true"
Tampilkan atau sembunyikan bagian diskon.
string
Query parameter apa pun yang diawali
metadata_ akan diteruskan sebagai metadata.returnUrl dari config-nya ke link sebagai redirect_url.Format Respons
Static checkout mengembalikan respons JSON dengan URL checkout. Dalam test mode, URL menggunakantest.checkout.dodopayments.com.Dynamic Checkout (POST)
Dynamic Checkout (POST)
- Kirim parameter sebagai body JSON dalam request POST.
- Mendukung pembayaran one-time dan recurring.
billingdancustomerwajib diisi.- Untuk setiap field body yang didukung, lihat:
Format Respons
Dynamic checkout mengembalikan respons JSON dengan URL checkout:Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout session membuat hosted checkout untuk pembelian one-time dan subscription, dengan kontrol penuh atas customization.
product_cart adalah satu-satunya field wajib. Jika body tidak memiliki return_url, handler menggunakan returnUrl dari config-nya.Untuk detail selengkapnya dan semua field yang didukung, lihat Checkout Sessions Integration Guide.Session yang dibuat dengan payment_method_id tidak mengembalikan URL checkout, sehingga handler merespons dengan 400. Untuk membebankan saved payment method, buat session menggunakan SDK.Format Respons
Checkout session mengembalikan respons JSON dengan URL checkout:Customer Portal Route Handler
Customer Portal route handler membuat session Customer Portal untuk customer yang Anda teruskan dan mengarahkan browser ke session tersebut.Query Parameters
string
wajib
Customer ID untuk portal session, misalnya
?customer_id=cus_123.boolean
Jika ditetapkan ke
true, Dodo Payments juga mengirimkan link portal melalui email kepada customer.customer_id tidak ada, dan 500 jika portal session tidak dapat dibuat.
Webhook Route Handler
Webhook route handler memverifikasi setiap request sebelum menjalankan code Anda:- Method: Hanya request POST yang didukung. Method lain mengembalikan 405.
- Signature Verification: Memverifikasi raw request body terhadap header
webhook-id,webhook-timestamp, danwebhook-signaturemenggunakanwebhookKey. Mengembalikan 401 jika verifikasi gagal. - Payload Validation: Mem-parsing body yang telah diverifikasi sebagai JSON dan memvalidasinya dengan Zod. Mengembalikan 400 ketika payload yang di-parsing tidak cocok dengan webhook schema.
- Error Handling:
- 401: Signature tidak valid
- 400: Payload tidak valid
- 500: Error verifikasi yang tidak terduga, JSON malformed, atau error yang dilemparkan callback Anda
- Event Routing: Memanggil
onPayloaduntuk setiap event, kemudian handler untuk tipe event tersebut, dan mengembalikan 200.