Langsung ke konten utama

Prasyarat

Sebelum mengintegrasikan Dodo Payments ke dalam aplikasi mobile Anda, pastikan Anda memiliki:
  • Akun Dodo Payments: Akun merchant aktif dengan akses API
  • Kredensial API: Kunci API dan kunci rahasia webhook dari dasbor 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 aman 4 langkah di mana backend Anda menangani panggilan API dan aplikasi mobile Anda mengelola pengalaman pengguna.
1

Backend: Buat Sesi Checkout

Dokumentasi API Sesi Checkout

Pelajari cara membuat sesi checkout di backend Anda menggunakan Node.js, Python, dan lainnya. Lihat contoh lengkap dan referensi parameter di dokumentasi API Sesi Checkout yang didedikasikan.
Keamanan: Sesi checkout harus dibuat di server backend Anda, tidak pernah di aplikasi mobile. Ini melindungi kunci API Anda dan memastikan validasi yang tepat.
2

Mobile: Dapatkan URL Checkout

Aplikasi mobile Anda memanggil backend Anda untuk mendapatkan URL checkout:
func getCheckoutURL(productId: String, customerEmail: String, customerName: String) async throws -> String {
    let url = URL(string: "https://your-backend.com/api/create-checkout-session")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    
    let requestData: [String: Any] = [
        "productId": productId,
        "customerEmail": customerEmail,
        "customerName": customerName
    ]
    request.httpBody = try JSONSerialization.data(withJSONObject: requestData)
    
    let (data, _) = try await URLSession.shared.data(for: request)
    let response = try JSONDecoder().decode(CheckoutResponse.self, from: data)
    return response.checkout_url
}
Keamanan: Aplikasi mobile hanya berkomunikasi dengan backend Anda, tidak pernah langsung dengan API Dodo Payments.
3

Mobile: Buka Checkout di Browser

4

Backend: Tangani Penyelesaian Pembayaran

Proses penyelesaian pembayaran melalui webhook dan URL pengalihan untuk mengonfirmasi status pembayaran.

Integrasi Spesifik Platform

Pilih platform mobile Anda di bawah untuk contoh implementasi lengkap:

Integrasi Android

Implementasi Chrome Custom Tabs

// Add Chrome Custom Tabs dependency to build.gradle
implementation 'androidx.browser:browser:1.5.0'

// In your Activity
class PaymentActivity : AppCompatActivity() {
    private var customTabsSession: CustomTabsSession? = null
    private var customTabsClient: CustomTabsClient? = null
    private var customTabsServiceConnection: CustomTabsServiceConnection? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Initialize Custom Tabs
        customTabsServiceConnection = object : CustomTabsServiceConnection() {
            override fun onCustomTabsServiceConnected(name: ComponentName, client: CustomTabsClient) {
                customTabsClient = client
                customTabsClient?.warmup(0L)
                customTabsSession = customTabsClient?.newSession(object : CustomTabsCallback() {
                    override fun onNavigationEvent(navigationEvent: Int, extras: Bundle?) {
                        // Handle navigation events
                    }
                })
            }
            override fun onServiceDisconnected(name: ComponentName) {
                customTabsClient = null
            }
        }
        CustomTabsClient.bindCustomTabsService(
            this,
            "com.android.chrome",
            customTabsServiceConnection!!
        )
        // Get checkout URL from backend and launch
        lifecycleScope.launch {
            try {
                val checkoutURL = getCheckoutURL("prod_123", "[email protected]", "Customer Name")
                val customTabsIntent = CustomTabsIntent.Builder(customTabsSession)
                    .build()
                customTabsIntent.launchUrl(this@PaymentActivity, Uri.parse(checkoutURL))
            } catch (e: Exception) {
                // Handle error
                Log.e("PaymentActivity", "Failed to get checkout URL", e)
            }
        }
    }
}

Praktik Terbaik

  • Keamanan: Jangan pernah menyimpan kunci API di kode aplikasi Anda. Gunakan penyimpanan yang aman dan SSL pinning.
  • Pengalaman Pengguna: Tampilkan indikator pemuatan, tangani kesalahan dengan baik, dan berikan pesan yang jelas.
  • Pengujian: Gunakan kartu uji, simulasi kesalahan jaringan, dan uji di berbagai perangkat.

Pemecahan Masalah

Masalah Umum

  • WebView tidak membuka tautan pembayaran: Pastikan tautan pembayaran valid dan menggunakan HTTPS.
  • Callback tidak diterima: Periksa URL pengembalian dan konfigurasi webhook Anda.
  • Kesalahan kunci API: Verifikasi bahwa kunci API Anda benar dan memiliki izin yang diperlukan.

Sumber Daya Tambahan

Untuk pertanyaan atau dukungan, hubungi [email protected].