Skip to main content

Ikhtisar

Adaptor Better Auth, @dodopayments/better-auth, adalah plugin Better Auth yang menghubungkan pengguna Anda ke Dodo Payments. Fitur yang tersedia:
  • Pembuatan pelanggan opsional atau penautan pelanggan berdasarkan email saat pendaftaran
  • Sesi checkout, metode checkout yang disarankan, dengan pemetaan slug produk
  • Customer Portal mandiri
  • Endpoint ingestion dan pelaporan penggunaan untuk penagihan berbasis penggunaan
  • Pemrosesan event webhook dengan verifikasi tanda tangan
  • Tipe TypeScript untuk setiap endpoint
Anda memerlukan akun Dodo Payments dan kunci API untuk menggunakan integrasi ini.

Prasyarat

  • Node.js 16 atau yang lebih baru
  • Akses ke dasbor Dodo Payments
  • Proyek yang sudah menggunakan Better Auth 1.4 atau rilis 1.x yang lebih baru

Instalasi

1

Install Dependencies

Jalankan perintah ini di root proyek Anda:
Adaptor, Dodo Payments SDK, Better Auth, dan Zod telah diinstal.

Pengaturan

1

Configure Environment Variables

Tambahkan variabel berikut ke file .env Anda. Buat API key di Developer → API Keys pada dasbor. Anda mendapatkan webhook secret saat menambahkan endpoint webhook, seperti yang dijelaskan di bagian Webhooks pada halaman ini. BETTER_AUTH_SECRET adalah string acak yang terdiri dari setidaknya 32 karakter.
Jangan pernah meng-commit kunci API atau rahasia apa pun ke kontrol versi.
2

Set Up Server-Side Integration

Buat atau perbarui src/lib/auth.ts:
Plugin menambahkan field dodoCustomerId ke tabel user Better Auth, tempat plugin menyimpan ID pelanggan Dodo Payments setiap pengguna. Setelah menambahkan plugin, perbarui skema database dengan Better Auth CLI.
Atur environment ke live_mode untuk production.
3

Set Up Client-Side Integration

Buat atau perbarui src/lib/auth-client.ts:

Contoh Penggunaan

Gunakan authClient.dodopayments.checkoutSession untuk integrasi baru. Metode lama checkout sudah deprecated dan hanya dipertahankan untuk kompatibilitas mundur.

Membuat Sesi Checkout (Disarankan)

Buat sesi checkout dari slug yang dikonfigurasi atau dari keranjang produk, lalu arahkan pelanggan ke URL yang dikembalikan:
checkoutSession mengisi beberapa field untuk Anda:
  • Alamat penagihan: Tidak perlu diberikan di awal karena checkout akan mengambilnya dari pelanggan. Untuk mengisinya terlebih dahulu, teruskan billing_address.
  • Pelanggan: Untuk pengguna yang sudah login, plugin menggunakan email dan nama dari sesi Better Auth mereka dan mengabaikan objek customer apa pun yang Anda teruskan. Tanpa pengguna yang sudah login, plugin menggunakan objek customer.
  • Field lainnya: Argumen ini menerima field yang sama seperti request body endpoint Create Checkout Session, ditambah slug dan referenceId.
Jika slug belum dikonfigurasi, atau Anda tidak meneruskan slug maupun product_cart, request akan gagal dengan error 400.
URL pengembalian berasal dari successUrl yang dikonfigurasi di plugin server, dan diselesaikan berdasarkan URL aplikasi Anda. Plugin mengabaikan return_url apa pun di payload client.

Checkout Lama (Deprecated)

Metode authClient.dodopayments.checkout sudah deprecated. Untuk implementasi baru, gunakan checkoutSession.
Metode lama ini memerlukan billing dan customer, lalu membuat payment link melalui alur dynamic checkout yang sudah deprecated. Field yang Anda tetapkan di customer akan menggantikan email dan nama dari sesi.

Mengakses Customer Portal

Endpoint portal memerlukan pengguna yang sudah login dengan alamat email terverifikasi. Jika pengguna belum memiliki pelanggan Dodo Payments, plugin akan mencarinya berdasarkan email atau membuatnya. customer.portal() mengembalikan URL portal:

Menampilkan Data Pelanggan

Tampilkan subscription dan payment pelanggan yang sudah login. page dimulai dari 1, dan status memfilter hasil:

Melacak Penggunaan Terukur

Aktifkan plugin usage() di server untuk mencatat event penggunaan bagi penagihan berbasis penggunaan dan memungkinkan pelanggan melihat penggunaannya. Kedua metode memerlukan pengguna yang sudah login dengan alamat email terverifikasi.
  • authClient.dodopayments.usage.ingest mencatat event untuk pengguna yang sudah login.
  • authClient.dodopayments.usage.meters.list menampilkan event penggunaan pelanggan yang sudah login. Method ini menerima parameter query page_number, page_size, event_name, meter_id, start, dan end.
Dodo Payments menolak event dengan timestamp lebih dari satu jam di masa lalu atau lebih dari lima menit di masa mendatang.
Jika Anda menghilangkan meter_id, daftar tersebut mencakup semua event penggunaan pelanggan. Dengan meter_id, daftar hanya mencakup event yang cocok dengan meter tersebut.

Webhook

Plugin webhook memverifikasi tanda tangan setiap event Dodo Payments dan memanggil handler Anda. Endpoint default adalah /api/auth/dodopayments/webhooks.
1

Generate and Set Webhook Secret

Di dasbor, buka Developer → Webhooks dan tambahkan URL endpoint Anda, misalnya https://<your-domain>/api/auth/dodopayments/webhooks. Salin signing secret endpoint ke file .env Anda:
2

Handle Webhook Events

Teruskan handler untuk setiap event yang ingin Anda proses. onPayload dijalankan untuk setiap event:
Jika verifikasi tanda tangan gagal atau handler menimbulkan error, endpoint akan merespons dengan 400. Setelah handler Anda selesai, endpoint mengembalikan { received: true }.

Handler Event Webhook yang Didukung

Setiap handler menerima payload terverifikasi untuk tipe event-nya:

Referensi Konfigurasi

  • client (wajib): Instance client DodoPayments
  • createCustomerOnSignUp (opsional): Buat pelanggan Dodo Payments saat pengguna mendaftar, atau tautkan pelanggan yang sudah ada dengan email yang sama. Plugin juga memperbarui pelanggan saat detail pengguna berubah.
  • use (wajib): Array plugin yang akan diaktifkan (checkout, portal, usage, webhooks)
  • getCustomerParams (opsional): Function yang menerima User Better Auth dan mengembalikan field tambahan untuk dilampirkan ke pelanggan Dodo Payments saat pembuatan dan pembaruan (misalnya metadata, phone_number). Function ini dapat bersifat async.
  • products: Array objek { productId, slug }, atau function async yang mengembalikan satu objek
  • successUrl: URL untuk mengarahkan pengguna setelah pembayaran berhasil
  • authenticatedUsersOnly: Memerlukan autentikasi pengguna (default: false)

Pemecahan Masalah & Tips

  • API key tidak valid: Periksa DODO_PAYMENTS_API_KEY di .env, dan pastikan mode key sesuai dengan environment.
  • Ketidaksesuaian tanda tangan webhook: Pastikan webhook secret sama dengan yang ditetapkan di dasbor Dodo Payments.
  • Pelanggan tidak dibuat: Pastikan createCustomerOnSignUp diatur ke true.
  • Request portal atau usage mengembalikan 401: Alamat email pengguna belum diverifikasi.
  • Gunakan environment variables untuk semua secret dan key.
  • Uji di test_mode sebelum beralih ke live_mode.
  • Catat event webhook untuk debugging dan audit.

Prompt untuk LLM

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