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.2
Set Up Server-Side Integration
Buat atau perbarui Plugin menambahkan field
src/lib/auth.ts: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.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
customerapa pun yang Anda teruskan. Tanpa pengguna yang sudah login, plugin menggunakan objekcustomer. - Field lainnya: Argumen ini menerima field yang sama seperti request body endpoint Create Checkout Session, ditambah
slugdanreferenceId.
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 lama ini memerlukanbilling 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 pluginusage() 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.ingestmencatat event untuk pengguna yang sudah login.authClient.dodopayments.usage.meters.listmenampilkan event penggunaan pelanggan yang sudah login. Method ini menerima parameter querypage_number,page_size,event_name,meter_id,start, danend.
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:{ received: true }.
Handler Event Webhook yang Didukung
Setiap handler menerima payload terverifikasi untuk tipe event-nya:Referensi Konfigurasi
Plugin Options
Plugin Options
- 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
UserBetter Auth dan mengembalikan field tambahan untuk dilampirkan ke pelanggan Dodo Payments saat pembuatan dan pembaruan (misalnyametadata,phone_number). Function ini dapat bersifat async.
Checkout Plugin Options
Checkout Plugin Options
- 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
Common Issues
Common Issues
- API key tidak valid: Periksa
DODO_PAYMENTS_API_KEYdi.env, dan pastikan mode key sesuai denganenvironment. - Ketidaksesuaian tanda tangan webhook: Pastikan webhook secret sama dengan yang ditetapkan di dasbor Dodo Payments.
- Pelanggan tidak dibuat: Pastikan
createCustomerOnSignUpdiatur ketrue. - Request portal atau usage mengembalikan 401: Alamat email pengguna belum diverifikasi.
Best Practices
Best Practices
- Gunakan environment variables untuk semua secret dan key.
- Uji di
test_modesebelum beralih kelive_mode. - Catat event webhook untuk debugging dan audit.