Quick Start
Jalankan integrasi pembayaran seluler Anda dalam 4 langkah sederhana
Platform Examples
Contoh kode lengkap untuk Android, iOS, React Native, dan Flutter
Dodo Payments menyediakan checkout SDK resmi untuk Android, iOS, React Native,
dan Flutter. Masing-masing membungkus pola yang didokumentasikan di bawah ini (buka URL checkout,
tangkap pengembalian, parsing hasil) di balik satu panggilan
start(...) bertipe, dengan pemulihan sesi yang ditinggalkan sebagai fitur bawaan. Gunakan WebView manual hanya
jika tidak ada yang sesuai dengan stack Anda.Prasyarat
Sebelum mengintegrasikan Dodo Payments ke aplikasi mobile Anda, pastikan Anda memiliki:- Akun Dodo Payments: Akun merchant aktif dengan akses API
- Kredensial API: API key dan webhook secret key dari dashboard Anda
- Proyek Aplikasi Mobile: Aplikasi Android, iOS, React Native, atau Flutter
- Server Backend: Untuk menangani pembuatan sesi checkout dengan aman
Alur Kerja Integrasi
Integrasi mobile mengikuti proses 4 langkah yang aman, dengan backend Anda menangani panggilan API dan aplikasi mobile Anda mengelola pengalaman pengguna.1
Backend: Create Checkout Session
Checkout Session API Docs
Pelajari cara membuat sesi checkout di backend Anda menggunakan Node.js, Python, dan lainnya. Lihat contoh lengkap dan referensi parameter dalam dokumentasi Checkout Sessions API khusus.
Keamanan: Sesi checkout harus dibuat di server backend Anda, bukan di aplikasi mobile. Hal ini melindungi API key Anda dan memastikan validasi yang tepat.
2
Mobile: Get Checkout URL
Aplikasi mobile Anda memanggil backend untuk mendapatkan URL checkout. Autentikasi
permintaan ini dengan token sesi milik pengguna yang sudah masuk.
- iOS (Swift)
- Android (Kotlin)
- React Native (JavaScript)
- Flutter (Dart)
Keamanan: Aplikasi mobile hanya berkomunikasi dengan backend Anda, bukan langsung dengan Dodo Payments API.
3
Mobile: Open Checkout in Browser
Buka URL checkout di browser dalam aplikasi yang aman untuk memproses pembayaran.
Atau lewati seluruh penyiapan manual dengan checkout SDK resmi untuk
platform Anda.
Pick your mobile SDK
Langkah instalasi dan petunjuk penyiapan untuk Android, iOS, React Native, dan Flutter.
4
Backend: Handle Payment Completion
Proses penyelesaian pembayaran melalui webhook dan URL pengalihan untuk mengonfirmasi status pembayaran.
Pilih SDK Anda
Setiap SDK mobile menyediakan kontrak yang sama: satu panggilanstart(...) membuka checkout
Dodo yang di-hosting di browser native platform dan mengembalikan
CheckoutResult bertipe yang status-nya adalah succeeded, failed, cancelled,
pending, atau expired. Tidak ada yang menyimpan API key atau memanggil Dodo
Payments API, dan keempatnya mendukung pemulihan sesi yang ditinggalkan.
Android
com.dodopayments.api:checkout-android membuka Chrome Custom Tab. Memerlukan minSdk 23.iOS
dodopayments-mobile-sdk-ios membuka SFSafariViewController. Memerlukan iOS 16+.React Native
@dodopayments/react-native-checkout, Turbo Module di atas kedua native core. Memerlukan React Native 0.76+.Flutter
dodopayments_checkout, channel Pigeon di atas kedua native core. Memerlukan Flutter 3.44+.Mendaftarkan Skema URL Callback
Keempat SDK mengembalikan kontrol ke aplikasi Anda melalui skema URL khusus yang Anda pilih, misalnyamyapp://checkout/return. Daftarkan sekali untuk setiap
platform:
- Android
- iOS
- Expo
android/app/build.gradle
Lebih suka membuatnya sendiri? Buka
checkout_url di WebView dan intercept
navigasi ke return_url Anda, lalu baca parameter query status dan payment_id.
SDK di atas melakukan ini untuk Anda di browser nyata platform, sehingga Apple Pay dan Google Pay
tetap berfungsi.Kustomisasi Tampilan
Setiap SDK menerima parametercustomization opsional pada start(...) /
CheckoutParams yang mengontrol tampilan dan
perilaku surface browser native — toolbar, tombol, dan presentasi. Ini terpisah dari
tema halaman checkout itu sendiri, yang Anda konfigurasi di sisi server melalui
customization.theme_config pada
checkout session.
Opsi dikelompokkan berdasarkan platform karena Custom Tab Android dan
iOS SFSafariViewController mengekspos kontrol native yang berbeda. Semua field bersifat
opsional; jika customization dihilangkan sepenuhnya, tampilan default
masing-masing platform akan digunakan.
Android — Custom Tab
Android — Custom Tab
Color
Warna latar toolbar.
Warna navigation bar.
Warna divider di atas navigation bar.
'default' | 'back'
default menampilkan ikon sistem “X”; back menggambar panah kembali.'start' | 'end'
Menentukan di sisi mana tombol tutup muncul pada toolbar.
Menampilkan ikon berbagi pada toolbar.
boolean
Menampilkan judul halaman di bawah URL pada toolbar.
boolean
Memungkinkan toolbar tersembunyi secara otomatis saat halaman di-scroll.
boolean
Menampilkan “Bookmark this page” di menu overflow.
boolean
Menampilkan “Download page” di menu overflow.
'system' | 'light' | 'dark'
Memaksa tampilan terang atau gelap terlepas dari pengaturan sistem perangkat.
iOS — SFSafariViewController
iOS — SFSafariViewController
'done' | 'close' | 'cancel'
Label atau ikon untuk tombol tutup.
'pageSheet' | 'fullScreen'
pageSheet ditampilkan sebagai card dengan swipe-to-dismiss; fullScreen menutupi seluruh layar.boolean
Memungkinkan toolbar diciutkan saat di-scroll. Hanya terlihat ketika
presentationStyle adalah fullScreen — pageSheet menjaga bar tetap tersemat terlepas dari pengaturan ini.'system' | 'light' | 'dark'
Memaksa tampilan terang atau gelap terlepas dari pengaturan sistem perangkat.
- React Native
- Flutter
- Android (Kotlin)
- iOS (Swift)
Praktik Terbaik
- Keamanan: Jangan pernah menyertakan API key di aplikasi Anda. Buat checkout session di backend Anda dan teruskan hanya
checkout_urlyang dihasilkan kepada client. - Otoritas: Perlakukan
CheckoutResult.statussebagai petunjuk UI. Berikan akses hanya setelah backend Anda mengonfirmasi pembayaran. - Pengalaman Pengguna: Tampilkan status loading saat backend Anda membuat session, dan tangani
cancelledsebagai hasil normal, bukan error. - Pengujian: Gunakan test mode dan test cards, lalu verifikasi round trip return-URL pada perangkat nyata maupun simulator.
Pemecahan Masalah
Masalah Umum
- Callback tidak pernah diterima: Scheme dalam
returnUrlharus sesuai dengan yang Anda daftarkan. Di Android, itu adalah manifest placeholderdodoCallbackScheme; di iOS dan React Native, itu adalah URL typeInfo.plist. - Checkout kembali ke browser, bukan ke aplikasi Anda (iOS): Anda belum meneruskan URL yang masuk. Panggil
DodoCheckout.handleOpenURL(url)dari.onOpenURL,scene(_:openURLContexts:), atau listenerLinkingReact Native. PLATFORM_ERRORdi Android: Biasanya disebabkan oleh ketidaksesuaian scheme. Hal ini juga dapat muncul jikaMainActivityAnda menetapkanandroid:taskAffinity=""(default bawaanflutter create), yang menyebabkan beberapa build OEM kehilangan checkout yang sedang berlangsung.ALREADY_IN_PROGRESS: Checkout masih terbuka. Tunggu atau tutup checkout sebelumnya sebelum memulai checkout lain.- Build gagal dengan placeholder yang tidak ter-resolve: Anda telah menambahkan Android SDK tetapi belum menetapkan
manifestPlaceholders["dodoCallbackScheme"]. - Pembayaran berhasil tetapi akses tidak diberikan: Hal ini wajar jika Anda mengandalkan hasil mobile. Berikan akses dari webhook
payment.succeeded/subscription.activesebagai gantinya.
Sumber Daya Tambahan
Untuk pertanyaan atau dukungan, hubungi support@dodopayments.com.