处理外部浏览器返回 (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 流程的意向
7个月前更新