Gérer le Retour du Navigateur Externe (callback_url)

Aperçu

Lorsqu'un flux de paiement nécessite que l'utilisateur complète une action dans un navigateur externe (par exemple, défi 3DS, redirection bancaire), il est essentiel d'utiliser le paramètre callback_url pour garantir que l'utilisateur revienne à votre application de manière fluide.


1. Définir le callback_url lors de la création de la session de paiement

Envoyez le paramètre callback_url lors de la création de la session de paiement :

{
  "callback_url": "myapp://return"
}
❗️

Important

Sans callback_urll'utilisateur risque de rester dans le navigateur sans pouvoir revenir à votre application.

2. Configurer votre application Android pour gérer le lien profond

Ajoutez un intent-filter à votre activité principale dans AndroidManifest.xml:

<activity android:name=".YourMainActivity">
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="myapp"
            android:host="return" />
    </intent-filter>
</activity>
  • Le régime (myapp) et le host (return) doivent correspondre à votre callback_url

3. Gérer l'intention dans votre activité

Dans votre activité, gérez l'intention de retour :

intent.data?.let { uri ->
    val url = uri.toString()
    if (url.contains("myapp://return")) {
        // Handle the return, e.g., show a message or navigate
        Toast.makeText(this, "Returned from payment flow", Toast.LENGTH_SHORT).show()
    }
}
  • Adaptez cette logique aux besoins de votre application

4. Exemple complet : intégration avec le SDK Yuno

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    startCheckout(
        callbackPaymentState = {
            Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
        }
    )

    if (intent?.data != null) {
        intent.data?.let {
            if (it.toString().contains(URI_INTENT_CONTINUE)) {
                val sessionId = extractCheckoutSessionFromIntent(intent)

                continuePayment(
                    showPaymentStatus = configuration.showStatusYuno,
                    checkoutSession = sessionId,
                    countryCode = configuration.country,
                ) { result ->
                    result?.let {
                        Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
                    }
                }
            }
        }
    } else {
        setContent {
            YunoContent(configuration) {
                initYuno()
            }
        }
    }
}

private fun extractCheckoutSessionFromIntent(intent: Intent?): String? {
    return intent?.data?.getQueryParameter("checkoutSession")
}

Bonnes Pratiques

  • Définissez et utilisez toujours le callback_url dans vos flux de paiement
  • Configurez correctement le intent-filter dans votre manifeste
  • Gérez l'intention de retour pour mettre à jour le statut du paiement ou naviguer l'utilisateur
  • Testez le flux sur plusieurs appareils et navigateurs

Résumé

  • Utilisez callback_url pour assurer le retour des utilisateurs à votre application
  • Configurez la gestion des liens profonds sur Android
  • Gérez l'intention pour finaliser le flux de paiement