Passer au contenu principal

Prérequis

Avant d’intégrer Dodo Payments dans votre application mobile, assurez-vous d’avoir :
  • Compte Dodo Payments : Compte marchand actif avec accès API
  • Identifiants API : Clé API et clé secrète de webhook depuis votre tableau de bord
  • Projet d’application mobile : Application Android, iOS, React Native ou Flutter
  • Serveur backend : Pour gérer en toute sécurité la création de sessions de paiement

Flux d’intégration

L’intégration mobile suit un processus sécurisé en 4 étapes où votre backend gère les appels API et votre application mobile gère l’expérience utilisateur.
1

Backend : Créer une session de paiement

Documentation API de session de paiement

Apprenez à créer une session de paiement dans votre backend en utilisant Node.js, Python, et plus encore. Consultez des exemples complets et des références de paramètres dans la documentation dédiée à l’API des sessions de paiement.
Sécurité : Les sessions de paiement doivent être créées sur votre serveur backend, jamais dans l’application mobile. Cela protège vos clés API et garantit une validation appropriée.
2

Mobile : Obtenir l'URL de paiement

Votre application mobile appelle votre backend pour obtenir l’URL de paiement :
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écurité : Les applications mobiles ne communiquent qu’avec votre backend, jamais directement avec l’API Dodo Payments.
3

Mobile : Ouvrir le paiement dans le navigateur

4

Backend : Gérer la finalisation du paiement

Traitez la finalisation du paiement via des webhooks et des URL de redirection pour confirmer l’état du paiement.

Intégration spécifique à la plateforme

Choisissez votre plateforme mobile ci-dessous pour des exemples d’implémentation complets :

Intégration Android

Mise en œuvre des onglets personnalisés Chrome

// 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)
            }
        }
    }
}

Meilleures pratiques

  • Sécurité : Ne stockez jamais les clés API dans le code de votre application. Utilisez un stockage sécurisé et le pinning SSL.
  • Expérience utilisateur : Affichez des indicateurs de chargement, gérez les erreurs avec soin et fournissez des messages clairs.
  • Tests : Utilisez des cartes de test, simulez des erreurs réseau et testez sur divers appareils.

Dépannage

Problèmes courants

  • WebView n’ouvre pas le lien de paiement : Assurez-vous que le lien de paiement est valide et utilise HTTPS.
  • Rappel non reçu : Vérifiez votre URL de retour et la configuration du webhook.
  • Erreurs de clé API : Vérifiez que votre clé API est correcte et dispose des autorisations nécessaires.

Ressources supplémentaires

Pour des questions ou un support, contactez [email protected].