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

安卓端PayPal Native Checkout SDK支付完成/取消后按钮无法渲染问题

问题解决方案

根因说明

PaymentButtonEligibility: eligibility: Error 报错是因为PayPal Native Checkout SDK内部会在单次支付流程结束后残留 eligibility 校验状态,没有自动重置,导致二次渲染按钮时校验失败无法正常显示。

修复步骤

  • 将按钮初始化逻辑从onCreate生命周期方法迁移到onResume中,每次页面回到前台时重新初始化按钮配置
  • 在所有支付结束回调(onApprove/onCancel/onError)中主动调用PayPalCheckout.reset()清空SDK内部缓存状态
  • 优先将PayPal Native Checkout SDK升级到v0.12.0及以上版本,官方在该版本修复了部分场景下的状态残留问题

修改后参考代码

class TestActivity : AppCompatActivity() {
    private lateinit var binding: ActivityTestBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityTestBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }

    override fun onResume() {
        super.onResume()
        setupPayPalButton()
    }

    private fun setupPayPalButton() {
        // 初始化前先重置SDK状态,避免历史残留影响
        PayPalCheckout.reset()
        binding.btnPay.setup(
            createOrder = CreateOrder { createOrderActions ->
                val order = Order(
                    intent = OrderIntent.CAPTURE,
                    appContext = AppContext(
                        userAction = UserAction.PAY_NOW
                    ),
                    purchaseUnitList = listOf(
                        PurchaseUnit(
                            amount = Amount(
                                currencyCode = CurrencyCode.MYR,
                                value = "12"
                            )
                        )
                    )
                )
                createOrderActions.create(order)
            },
            onApprove = OnApprove { approval ->
                approval.orderActions.capture { captureOrderResult ->
                    Log.i("CaptureOrder", "CaptureOrderResult: $captureOrderResult")
                    // 支付完成后重置状态
                    PayPalCheckout.reset()
                }
            },
            onCancel = OnCancel {
                Log.i("OnCancel", "Buyer canceled the PayPal experience.")
                // 取消支付后重置状态
                PayPalCheckout.reset()
            },
            onError = OnError { errorInfo ->
                Log.i("OnError", "Error: $errorInfo")
                // 支付报错后重置状态
                PayPalCheckout.reset()
            }
        )
    }
}

内容的提问来源于stack exchange,提问作者Jin Yuan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:57:03