You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集成Adyen SDK Android Components时SessionComponentCallback泛型参数问题

Adyen Android SDK SessionComponentCallback 正确实现

1. 泛型参数的正确填写

SessionComponentCallback需要指定对应支付组件的结果类型,如果你使用的是CardComponent,泛型参数应为CardComponentResult。修正后的回调定义如下:

object : SessionComponentCallback<CardComponentResult> {
    // 实现回调方法
}

2. 各回调方法的具体实现逻辑

onFinished(result: SessionPaymentResult)

支付流程结束后触发,需根据SessionPaymentResult的具体类型处理结果:

override fun onFinished(result: SessionPaymentResult) {
    when (result) {
        is AuthorisedResult -> {
            // 支付成功,更新UI显示成功状态,比如跳转到成功页面
            showSuccessScreen()
        }
        is RefusedResult -> {
            // 支付被拒绝,显示拒绝原因
            showError("支付被拒绝:${result.refusalReason}")
        }
        is PendingResult -> {
            // 支付待处理,提示用户等待结果通知
            showPendingMessage()
        }
        is CanceledResult -> {
            // 用户取消支付,返回支付选择页面
            navigateBackToPaymentMethods()
        }
        else -> {
            // 处理其他未知结果
            showUnknownError()
        }
    }
}

onAction(action: Action)

当需要额外操作(比如3DS验证)时触发,需将action传递给当前组件处理:

override fun onAction(action: Action) {
    // 取消注释并正确传入Activity实例
    cardComponent.handleAction(action, requireActivity())
}

onError(componentError: ComponentError)

组件发生错误时触发,需处理错误信息:

override fun onError(componentError: ComponentError) {
    // 显示错误信息给用户
    showError("支付出错:${componentError.message}")
    // 可选:记录错误日志
    Log.e("AdyenPayment", "Component error: ${componentError.errorCode}", componentError.cause)
}

额外注意点

你的代码中存在一个潜在问题:通过PaymentMethodTypes.GOOGLE_PAY获取支付方式,却用来创建CardComponent,这会导致组件与支付方式不匹配。如果要集成卡片支付,应改为:

val paymentMethod = checkoutSession?.getPaymentMethod(PaymentMethodTypes.CARD)

内容的提问来源于stack exchange,提问作者Jean-Philippe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:17:22