Zum Hauptinhalt springen

Voraussetzungen

Bevor Sie Dodo Payments in Ihre mobile App integrieren, stellen Sie sicher, dass Sie Folgendes haben:
  • Dodo Payments-Konto: Aktives Händlerkonto mit API-Zugriff
  • API-Anmeldeinformationen: API-Schlüssel und Webhook-Geheimschlüssel aus Ihrem Dashboard
  • Mobile App-Projekt: Android-, iOS-, React Native- oder Flutter-Anwendung
  • Backend-Server: Um die Erstellung von Checkout-Sitzungen sicher zu handhaben

Integrationsworkflow

Die mobile Integration folgt einem sicheren 4-Schritte-Prozess, bei dem Ihr Backend die API-Aufrufe verwaltet und Ihre mobile App die Benutzererfahrung steuert.
1

Backend: Checkout-Sitzung erstellen

Checkout-Sitzungs-API-Dokumentation

Erfahren Sie, wie Sie eine Checkout-Sitzung in Ihrem Backend mit Node.js, Python und mehr erstellen. Siehe vollständige Beispiele und Parameterreferenzen in der speziellen Checkout-Sitzungs-API Dokumentation.
Sicherheit: Checkout-Sitzungen müssen auf Ihrem Backend-Server erstellt werden, niemals in der mobilen App. Dies schützt Ihre API-Schlüssel und gewährleistet eine ordnungsgemäße Validierung.
2

Mobile: Checkout-URL abrufen

Ihre mobile App ruft Ihr Backend auf, um die Checkout-URL zu erhalten:
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
}
Sicherheit: Mobile Apps kommunizieren nur mit Ihrem Backend, niemals direkt mit der Dodo Payments API.
3

Mobile: Checkout im Browser öffnen

4

Backend: Zahlungsabschluss verarbeiten

Verarbeiten Sie den Zahlungsabschluss über Webhooks und Weiterleitungs-URLs, um den Zahlungsstatus zu bestätigen.

Plattform-spezifische Integration

Wählen Sie Ihre mobile Plattform unten für vollständige Implementierungsbeispiele:

Android-Integration

Implementierung von 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)
            }
        }
    }
}

Best Practices

  • Sicherheit: Speichern Sie API-Schlüssel niemals in Ihrem App-Code. Verwenden Sie sichere Speicherung und SSL-Pinning.
  • Benutzererfahrung: Zeigen Sie Ladeindikatoren an, behandeln Sie Fehler elegant und geben Sie klare Nachrichten aus.
  • Testen: Verwenden Sie Testkarten, simulieren Sie Netzwerkfehler und testen Sie auf verschiedenen Geräten.

Fehlersuche

Häufige Probleme

  • WebView öffnet den Zahlungslink nicht: Stellen Sie sicher, dass der Zahlungslink gültig ist und HTTPS verwendet.
  • Callback nicht empfangen: Überprüfen Sie Ihre Rückkehr-URL und die Webhook-Konfiguration.
  • API-Schlüssel-Fehler: Überprüfen Sie, ob Ihr API-Schlüssel korrekt ist und die erforderlichen Berechtigungen hat.