Skip to main content
Modul @dodopayments/nuxt menyediakan tiga handler rute server untuk aplikasi Nuxt Anda. checkoutHandler mengembalikan URL checkout, customerPortalHandler mengarahkan pelanggan ke Customer Portal, dan Webhooks memverifikasi event webhook serta meneruskannya ke kode Anda.

Checkout API Route

Buat URL checkout dari server route Nuxt.

Customer Portal API Route

Biarkan pelanggan mengelola subscription dan detail mereka dari server route Nuxt.

Webhooks API Route

Terima dan verifikasi event webhook Dodo Payments di Nuxt.

Ringkasan

Modul ini mendaftarkan handler-nya sebagai auto-import server Nuxt, sehingga rute server Anda dapat memanggil checkoutHandler, customerPortalHandler, dan Webhooks tanpa pernyataan import. Setiap rute membaca kredensial Anda dari runtimeConfig. Nuxt hanya mengekspos runtimeConfig.public ke browser, sehingga API key dan webhook secret tetap berada di server.

Instalasi

1

Install the Nuxt Module

Jalankan perintah ini di root proyek Anda:
Modul ini mencantumkan Nuxt 3 (3.13.1 atau yang lebih baru) dan zod 3.25 atau yang lebih baru sebagai peer dependency.
2

Register the Module in nuxt.config.ts

Tambahkan @dodopayments/nuxt ke array modules, lalu petakan kredensial Anda ke runtimeConfig:
nuxt.config.ts
Atur environment variable ini, misalnya dalam file .env di root proyek Anda:Server Nuxt yang telah di-build tidak membaca file .env Anda. Saat runtime, Nuxt hanya menimpa nilai runtimeConfig dari variabel yang sesuai dengan path-nya, seperti NUXT_PRIVATE_RETURN_URL untuk private.returnUrl. Karena itu, atur variabel ini di environment hosting Anda juga.
Jangan pernah commit file .env atau secret ke version control.

Contoh Handler Rute API

Contoh-contoh ini membuat rute server di direktori server/routes/api/. Nuxt menentukan rute setiap file berdasarkan nama dan akhiran method-nya, sehingga checkout.get.ts menangani GET /api/checkout.
Gunakan handler ini untuk menambahkan checkout Dodo Payments ke aplikasi Nuxt Anda. Rute GET menyediakan checkout statis. Rute POST menyediakan checkout session, atau checkout dinamis saat Anda mengatur type: "dynamic".
Buat rute GET untuk checkout statis:
checkout.post.ts menyediakan satu alur POST. Gunakan contoh checkout dinamis atau contoh checkout session:
Jika productId tidak ada atau tidak valid, handler mengembalikan respons 400.
Untuk menguji rute, kirim request berikut:

Handler Rute Checkout

Handler checkout mendukung ketiga cara menerima pembayaran dengan Dodo Payments:
  • Static Payment Links: URL yang dapat dibagikan untuk mengumpulkan pembayaran tanpa kode.
  • Dynamic Payment Links: Link pembayaran yang Anda buat dengan detail khusus. Link ini menggunakan endpoint yang sudah deprecated.
  • Checkout Sessions: Checkout hosted dengan keranjang produk, detail pelanggan, dan opsi kustomisasi. Ini adalah alur yang direkomendasikan.
checkoutHandler menerima opsi berikut:

Query Parameters yang Didukung

string
wajib
Identifier produk, misalnya ?productId=pdt_nZuwz45WAs64n3l07zpQR.
integer
default:"1"
Jumlah produk.
string
Nama lengkap pelanggan. Diabaikan jika firstName atau lastName diberikan.
string
Nama depan pelanggan.
string
Nama belakang pelanggan.
string
Alamat email pelanggan.
string
Negara pelanggan, sebagai kode ISO 3166-1 alpha-2.
string
Baris alamat pelanggan.
string
Kota pelanggan.
string
Negara bagian atau provinsi pelanggan.
string
ZIP atau kode pos pelanggan.
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_ akan diteruskan sebagai metadata.
Handler menambahkan returnUrl dari konfigurasinya ke link sebagai redirect_url.
Jika productId tidak ada, handler mengembalikan respons 400. Query parameter yang tidak valid dan product ID yang tidak ada juga mengembalikan 400.

Format Respons

Checkout statis mengembalikan respons JSON dengan URL checkout. Dalam test mode, URL menggunakan test.checkout.dodopayments.com.
Checkout dinamis mem-proxy endpoint POST /payments dan POST /subscriptions yang sudah deprecated. Fitur ini tetap berfungsi untuk integrasi yang sudah ada, tetapi integrasi baru sebaiknya menggunakan checkout sessions.

Format Respons

Checkout dinamis mengembalikan respons JSON dengan URL checkout:
Checkout sessions membuat checkout hosted untuk pembelian satu kali dan langganan, dengan kontrol penuh atas kustomisasi. product_cart adalah satu-satunya field wajib. Jika body tidak memiliki return_url, handler menggunakan returnUrl dari konfigurasinya.Untuk detail selengkapnya dan setiap field yang didukung, lihat Panduan Integrasi Checkout Sessions.Session yang dibuat dengan payment_method_id tidak mengembalikan URL checkout, sehingga handler merespons dengan 400. Untuk menagih payment method yang tersimpan, buat session menggunakan SDK.

Format Respons

Checkout sessions mengembalikan respons JSON dengan URL checkout:

Handler Rute Customer Portal

Handler rute Customer Portal membuat Customer Portal session untuk pelanggan yang Anda berikan dan mengarahkan browser ke session tersebut.
Handler ini tidak memeriksa siapa yang memanggilnya. Siapa pun yang memintanya dengan customer ID akan mendapatkan portal pelanggan tersebut. Lindungi rute dengan autentikasi Anda sendiri, dan hanya teruskan customer ID pengguna yang sedang masuk.

Query Parameters

string
wajib
Customer ID untuk portal session, misalnya ?customer_id=cus_123.
boolean
Jika diatur ke true, Dodo Payments juga mengirim link portal melalui email kepada pelanggan.
Mulai dari @dodopayments/nuxt 0.2.11, handler mengembalikan HTTP 400 jika customer_id tidak ada dan HTTP 500 jika sesi portal tidak dapat dibuat. Versi sebelumnya mengembalikan HTTP 200 dengan body JSON { "status": 400, "body": "Missing customer_id in query parameters" }. Untuk mengandalkan status HTTP, upgrade ke 0.2.11 atau yang lebih baru.

Handler Rute Webhook

Handler rute webhook memverifikasi setiap request sebelum menjalankan kode Anda:
  • Method: Hanya request POST yang didukung. Method lain mengembalikan 405.
  • Signature Verification: Memverifikasi raw request body serta header webhook-id, webhook-timestamp, dan webhook-signature dengan webhookKey, mengikuti spesifikasi Standard Webhooks. Mengembalikan 401 jika verifikasi gagal.
  • Payload Validation: Memvalidasi payload 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 onPayload untuk setiap event, kemudian handler untuk tipe event tersebut, dan mengembalikan 200.
Adaptor tidak menangkap error yang dilemparkan oleh handler Anda. Error tersebut diteruskan ke Nuxt dan request gagal.

Handler Event Webhook yang Didukung

Setiap handler menerima payload terverifikasi untuk tipe event-nya:
Untuk mengetahui arti setiap event, lihat Panduan Event Webhook.

Prompt untuk LLM

Salin prompt ini ke AI coding assistant Anda agar modul ditambahkan ke proyek. Untuk memberikan docs dan skills Dodo Payments kepada agent Anda, instal Agent Plugin.
Terakhir diubah pada 28 September 2026