集成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
相关产品推荐
相关产品推荐

