Hoppa till huvudinnehåll

Förutsättningar

Innan du integrerar Dodo Payments i din mobilapp, se till att du har:
  • Dodo Payments-konto: Aktivt handelskonto med API-åtkomst
  • API-referenser: API-nyckel och webhook-hemlig nyckel från din instrumentpanel
  • Mobilapp-projekt: Android, iOS, React Native eller Flutter-applikation
  • Backend-server: För att säkert hantera skapandet av kassa-sessioner

Integrationsarbetsflöde

Mobilintegrationen följer en säker 4-stegsprocess där din backend hanterar API-anrop och din mobilapp hanterar användarupplevelsen.
1

Backend: Skapa kassa-session

Kassa-session API-dokumentation

Lär dig hur du skapar en kassa-session i din backend med Node.js, Python och mer. Se fullständiga exempel och parameterreferenser i den dedikerade Kassa-session API dokumentationen.
Säkerhet: Kassa-sessioner måste skapas på din backend-server, aldrig i mobilappen. Detta skyddar dina API-nycklar och säkerställer korrekt validering.
2

Mobil: Hämta kassa-URL

Din mobilapp anropar din backend för att hämta kassa-URL:en:
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
}
Säkerhet: Mobilappar kommunicerar endast med din backend, aldrig direkt med Dodo Payments API.
3

Mobil: Öppna kassa i webbläsare

4

Backend: Hantera betalningsslutförande

Bearbeta betalningsslutförande via webhooks och omdirigerings-URL:er för att bekräfta betalningsstatus.

Plattformspecifik integration

Välj din mobilplattform nedan för fullständiga implementations exempel:

Android-integration

Implementering av 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)
            }
        }
    }
}

Bästa praxis

  • Säkerhet: Spara aldrig API-nycklar i din appkod. Använd säker lagring och SSL-pinning.
  • Användarupplevelse: Visa laddningsindikatorer, hantera fel på ett smidigt sätt och ge tydliga meddelanden.
  • Testning: Använd testkort, simulera nätverksfel och testa på olika enheter.

Felsökning

Vanliga problem

  • WebView öppnar inte betalningslänken: Se till att betalningslänken är giltig och använder HTTPS.
  • Återkoppling mottagen inte: Kontrollera din återvändande URL och webhook-konfiguration.
  • API-nyckelfel: Verifiera att din API-nyckel är korrekt och har nödvändiga behörigheter.

Ytterligare resurser

För frågor eller support, kontakta [email protected].