Skip to main content
Package @dodopayments/sveltekit menyediakan tiga handler rute untuk aplikasi SvelteKit Anda. Checkout mengembalikan URL checkout, CustomerPortal mengarahkan customer ke Customer Portal, dan Webhooks memverifikasi event webhook serta meneruskannya ke kode Anda.

Checkout Handler

Buat URL checkout dari aplikasi SvelteKit Anda.

Customer Portal

Biarkan customer mengelola subscription dan detail mereka.

Webhooks

Terima dan verifikasi event webhook Dodo Payments.

Instalasi

1

Install the Package

Jalankan perintah ini di root project Anda:
Package ini mencantumkan SvelteKit 2 (@sveltejs/kit 2.20.3 atau yang lebih baru) dan zod 3.25 atau yang lebih baru sebagai peer dependency.
2

Set Up Environment Variables

Buat file .env di root project Anda:
Buat API key di Developer → API Keys. Tambahkan endpoint webhook Anda di Developer → Webhooks dan salin signing secret-nya ke DODO_PAYMENTS_WEBHOOK_KEY. DODO_PAYMENTS_RETURN_URL adalah tempat customer diarahkan setelah checkout. Jika Anda tidak meneruskan environment, handler akan menggunakan live_mode.
Jangan commit file .env atau secret ke version control.

Contoh Handler Rute

Contoh berikut adalah endpoint SvelteKit +server.ts di bawah src/routes/api/. Contoh tersebut mengimpor kredensial Anda dari $env/static/private, yang dijaga SvelteKit agar tidak masuk ke kode sisi client.
Gunakan handler ini untuk menambahkan checkout Dodo Payments ke aplikasi SvelteKit Anda. Checkout mengembalikan handler GET untuk checkout statis dan handler POST untuk checkout session, atau untuk checkout dinamis saat Anda menetapkan type: "dynamic". Export GET dari handler yang dibuat dengan type: "static" atau tanpa type, karena handler GET dari handler session atau dynamic mengembalikan 400.
Request checkout dinamis berfungsi saat POST berasal dari handler yang dibuat dengan type: "dynamic". Dengan type: "session", seperti pada contoh rute, kirim request checkout session.

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: payment link yang Anda buat dengan detail khusus. Link ini menggunakan endpoint yang sudah deprecated.
  • Checkout Sessions: checkout hosted dengan keranjang produk, detail customer, dan opsi kustomisasi. Ini adalah flow yang direkomendasikan.
Checkout menerima opsi berikut:

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
Baris alamat customer.
string
Kota customer.
string
Negara bagian atau provinsi customer.
string
ZIP atau kode pos 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 satuan utama mata uang, misalnya 12.5 untuk $12.50. Hanya berfungsi pada produk Pay What You Want dan diabaikan jika nilainya di bawah harga minimum produk.
boolean
default:"true"
Tampilkan atau sembunyikan bagian diskon.
string
Parameter query 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. Parameter query dan ID produk yang tidak valid atau 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 session.

Format Respons

Checkout dinamis mengembalikan respons JSON dengan URL checkout:
Checkout session membuat checkout hosted untuk pembelian sekali dan subscription, dengan kontrol penuh atas kustomisasi. product_cart adalah satu-satunya field yang wajib diisi. Jika body tidak memiliki return_url, handler menggunakan returnUrl dari konfigurasinya.Untuk detail lebih lanjut dan semua 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 membebankan payment method yang tersimpan, buat session dengan SDK.

Format Respons

Checkout session mengembalikan respons JSON dengan URL checkout:

Handler Rute Customer Portal

Handler rute Customer Portal membuat session Customer Portal untuk customer yang Anda teruskan dan mengarahkan browser ke session tersebut dengan respons 302.
Handler tidak memeriksa siapa yang memanggilnya. Siapa pun yang memintanya dengan customer ID akan mendapatkan portal customer tersebut. Lindungi rute dengan autentikasi Anda sendiri, dan teruskan hanya customer ID milik user yang sedang login.

Query Parameter

string
wajib
Customer ID untuk session portal, misalnya ?customer_id=cus_123.
boolean
Jika ditetapkan ke true, Dodo Payments juga mengirimkan link portal melalui email kepada customer.
Mengembalikan 400 jika customer_id tidak ada, dan 500 jika session portal tidak dapat dibuat.

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, sesuai 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, lalu handler untuk tipe event tersebut, dan mengembalikan 200.
Adaptor tidak menangkap error yang dilemparkan oleh handler Anda. Error tersebut diteruskan ke SvelteKit, 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 assistant tersebut menambahkan adaptor ke project Anda. Untuk memberikan dokumentasi dan skill Dodo Payments kepada agent Anda, instal Agent Plugin.
Terakhir diubah pada 26 September 2026