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

如何在Jetpack Compose应用中集成Stripe Payment API?

Jetpack Compose集成Stripe PaymentSheet问题解决

问题分析

你遇到的报错核心原因是**onPaymentSheetResult被定义为onCreate的局部函数**,导致::onPaymentSheetResult无法被正确识别为PaymentSheetResultCallback类型。PaymentSheet初始化位置本身没问题,但回调函数的作用域错误引发了参数不匹配问题。

修正步骤

  1. 将回调函数改为Activity成员函数:把onPaymentSheetResult从onCreate内部移到Activity类的顶层作为成员函数,这样::onPaymentSheetResult就能正确指向符合要求的回调类型。
  2. 正确初始化PaymentSheet:保持在onCreate方法中初始化,位置可在setContent之后或之前,不影响功能。

修正后的完整代码

class MainActivity : ComponentActivity() {
    lateinit var paymentSheet: PaymentSheet

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 初始化PaymentSheet,此时::onPaymentSheetResult指向成员函数,类型匹配
        paymentSheet = PaymentSheet(this, ::onPaymentSheetResult)
        
        setContent {
            PayTheme {
                LoginUi()
            }
        }
    }

    // 改为Activity的成员函数,符合PaymentSheetResultCallback的要求
    fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) {
        // 后续实现支付结果处理逻辑
        when(paymentSheetResult) {
            is PaymentSheetResult.Completed -> {
                // 支付成功逻辑
            }
            is PaymentSheetResult.Canceled -> {
                // 用户取消支付逻辑
            }
            is PaymentSheetResult.Failed -> {
                // 支付失败逻辑,可通过paymentSheetResult.error获取错误信息
            }
        }
    }
}

额外说明

  • 如果需要在Compose UI中触发PaymentSheet(比如点击按钮唤起),可以通过LocalContext.current获取Activity实例后强转调用,或者将PaymentSheet实例托管到ViewModel中,更符合Compose的状态管理规范。
  • 确保已添加Stripe官方依赖,并配置了网络权限等必要的清单声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:05:22