Skip to main content
Package @dodopayments/tanstack menyediakan tiga request handler untuk proyek TanStack Start Anda. Checkout mengembalikan URL checkout, CustomerPortal mengarahkan pelanggan ke Customer Portal, dan Webhooks memverifikasi event webhook serta meneruskannya ke kode Anda. Setiap handler menerima Request standar dan mengembalikan Response, sehingga Anda dapat memanggilnya dari server route handler.

Checkout Handler

Buat URL checkout dengan alur static, dynamic, dan checkout session.

Customer Portal

Biarkan pelanggan mengelola subscription dan detail mereka.

Webhooks

Terima dan proses event webhook Dodo Payments.

Instalasi

1

Install the Package

Jalankan perintah ini di root proyek Anda:
Package ini juga memerlukan zod 3.25 atau yang lebih baru, yang tercantum sebagai peer dependency.
2

Set Up Environment Variables

Buat file .env di root proyek Anda. Buat API key di Developer → API Keys. Tambahkan endpoint webhook Anda di Developer → Webhooks, lalu salin Signing secret ke DODO_PAYMENTS_WEBHOOK_KEY:
TanStack Start memuat file .env, dan server routes membaca nilainya dari process.env. DODO_PAYMENTS_RETURN_URL adalah tempat pelanggan diarahkan setelah checkout. Jika Anda tidak meneruskan environment, handler akan menggunakan live_mode. API key test mode hanya berfungsi dengan test_mode.
Jangan pernah commit file .env atau secret ke version control.

Contoh Route Handler

Contoh-contoh ini adalah server routes TanStack Start di src/routes/api/. Masing-masing mendefinisikan handler di bawah server.handlers dalam createFileRoute. Rilis TanStack Start yang lebih lama, seperti 1.129, mendefinisikan server routes dengan createServerFileRoute dari @tanstack/react-start/server dan menggunakan panggilan .methods(). Handler Dodo Payments bekerja dengan cara yang sama pada kedua API: teruskan request kepadanya.
Gunakan handler ini untuk menambahkan checkout Dodo Payments ke aplikasi Anda. Handler GET menangani checkout static. Handler POST menangani checkout sessions, atau checkout dynamic saat Anda menetapkan type: "dynamic". Contoh checkout dynamic mengasumsikan Anda telah menetapkan type: "dynamic".

Checkout Route Handler

Checkout handler mendukung ketiga cara menerima pembayaran dengan Dodo Payments:
  • Static Payment Links: URL yang dapat dibagikan untuk mengumpulkan pembayaran tanpa kode.
  • Dynamic Payment Links: payment links yang Anda buat dengan detail khusus. Link ini menggunakan endpoint yang deprecated.
  • Checkout Sessions: checkout hosted dengan keranjang produk, detail pelanggan, dan opsi kustomisasi. Ini adalah alur yang direkomendasikan.
Checkout menerima opsi berikut: Handler menangani checkout static untuk request GET. Untuk request POST, handler membuat payment link dynamic saat type bernilai dynamic, dan checkout session jika tidak demikian.

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
Alamat jalan pelanggan.
string
Kota pelanggan.
string
Negara bagian atau provinsi pelanggan.
string
Kode 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 dikenakan, 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.
Flag disable hanya berlaku jika field yang sesuai memiliki nilai, misalnya email dengan disableEmail=true. Handler menambahkan returnUrl dari konfigurasinya ke link sebagai redirect_url.
Jika productId tidak ada, handler mengembalikan response 400. Query parameter yang tidak valid, atau produk yang tidak ada di akun Anda, juga mengembalikan 400.

Format Response

Checkout static mengembalikan response JSON dengan URL checkout. Dalam test mode, URL menggunakan test.checkout.dodopayments.com:
  • Kirim parameter sebagai JSON body dalam request POST.
  • Mendukung pembayaran one-time dan recurring. Handler mengambil produk, lalu membuat subscription jika produk bersifat recurring dan pembayaran one-time jika tidak.
  • Body memerlukan billing (dengan street, city, state, country, dan zipcode) serta customer, ditambah product_id atau product_cart. Subscription memerlukan product_id.
  • Untuk setiap body field yang didukung, lihat:
Checkout dynamic mem-proxy endpoint POST /payments dan POST /subscriptions yang deprecated. Fitur ini tetap berfungsi untuk integrasi yang sudah ada, tetapi integrasi baru sebaiknya menggunakan checkout sessions.

Format Response

Checkout dynamic mengembalikan response JSON dengan payment link sebagai URL checkout:
Checkout sessions membuat checkout hosted untuk pembelian one-time dan subscription, dengan kontrol penuh atas kustomisasi. product_cart adalah satu-satunya field wajib dan memerlukan setidaknya satu produk. Jika body tidak memiliki return_url, handler menggunakan returnUrl dari konfigurasinya.Setiap checkout_url hanya dapat digunakan sekali dan kedaluwarsa setelah 24 jam, atau setelah 15 menit jika Anda meneruskan confirm: true. Session yang dibuat dengan payment_method_id tidak mengembalikan checkout_url, sehingga handler merespons dengan 400.Untuk detail selengkapnya dan semua field yang didukung, lihat Checkout Sessions Integration Guide.

Format Response

Checkout sessions mengembalikan response JSON dengan URL checkout:

Customer Portal Route Handler

Customer Portal route handler membuat session Customer Portal untuk pelanggan yang Anda teruskan dan mengarahkan browser ke sana. CustomerPortal menerima opsi bearerToken dan environment yang sama seperti Checkout.
Handler tidak memeriksa siapa yang memanggilnya. Siapa pun yang memintanya dengan customer ID akan mendapatkan portal pelanggan tersebut. Lindungi route dengan autentikasi Anda sendiri, dan teruskan hanya customer ID pengguna yang sedang sign in.

Query Parameters

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

Webhook Route Handler

Webhook route handler memverifikasi setiap request menggunakan webhook secret Anda, yang diteruskan sebagai webhookKey, sebelum menjalankan kode Anda:
  • Method: Hanya request POST yang didukung. Method lain mengembalikan 405.
  • Signature Verification: Memverifikasi 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, kemudian handler untuk tipe event tersebut, dan mengembalikan 200.
Adaptor tidak menangkap error yang dilemparkan oleh handler Anda. Error tersebut diteruskan ke TanStack Start, dan request gagal.

Webhook Event Handler yang Didukung

Setiap handler bersifat opsional dan async, serta menerima payload terverifikasi untuk tipe event-nya:
Untuk mengetahui arti setiap event, lihat Webhook Event Guide.

Prompt untuk LLM

Salin prompt ini ke AI coding assistant Anda agar assistant tersebut menambahkan adaptor ke proyek Anda. Untuk memberikan dokumentasi dan skills Dodo Payments kepada agent Anda juga, instal Agent Plugin.
Terakhir diubah pada 26 September 2026