处理外部浏览器返回 (callback_url)

概述

当payment 流程要求用户在外部浏览器中完成操作(如 3DS 挑战、银行重定向)时,必须使用 callback_url 参数,以确保用户无缝返回应用程序。


1.在创建结账会话时设置 callback_url

发送 callback_url 参数:

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

重要

没有 callback_url这样,用户可能会被留在浏览器中,无法返回到您的应用程序。

2.配置 Android 应用程序以处理深层链接

添加一个 intent-filter 的主要活动 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>
  • 该计划 (myapp)和主机(return) 必须与您的 callback_url

3.处理活动中的意图

在您的活动中,处理返回意图:

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()
    }
}
  • 根据应用程序的需要调整这一逻辑

4.完整示例:与 Yuno SDK 集成

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

最佳做法

  • 始终定义并使用 callback_url 在您的payment 流程中
  • 配置 intent-filter 正确地在您的清单中
  • 处理返回意图,以更新payment 状态或导航用户
  • 在多种设备和浏览器上测试流程

摘要

  • 使用 callback_url 确保用户再次访问您的应用程序
  • 在 Android 中配置深度链接处理
  • 处理完成payment 流程的意向