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

关于Stripe PaymentSheet支付确认及异常回调的技术问询

关于Stripe PaymentSheet回调及支付状态获取的解决方案

PaymentSheet 原生支持支付结果回调

PaymentSheet 本身提供了明确的回调机制来获取支付确认状态或异常信息,不同平台的实现方式如下:

iOS(Swift)

展示 PaymentSheet 时,通过 completion 闭包接收结果:

let paymentSheet = PaymentSheet(paymentIntentClientSecret: clientSecret)
paymentSheet.present(from: self) { result in
    switch result {
    case .completed:
        // 支付成功完成
        print("支付已确认")
    case .canceled:
        // 用户主动取消支付
        print("用户取消支付")
    case .failed(let error):
        // 支付流程出现异常
        print("支付失败: \(error.localizedDescription)")
    }
}

Android(Kotlin)

使用 presentWithPaymentResultCallback 方法获取回调:

val paymentSheet = PaymentSheet.create(this, clientSecret)
paymentSheet.presentWithPaymentResultCallback { result ->
    when (result) {
        is PaymentSheetResult.Completed -> {
            Log.d("Stripe", "支付已确认")
        }
        is PaymentSheetResult.Canceled -> {
            Log.d("Stripe", "用户取消支付")
        }
        is PaymentSheetResult.Failed -> {
            Log.d("Stripe", "支付失败: ${result.error.message}")
        }
    }
}

Web(JavaScript)

初始化 PaymentSheet 时传入 onComplete 回调函数:

const paymentSheet = await stripe.initPaymentSheet({
    paymentIntentClientSecret: clientSecret,
    // 其他配置项
});

paymentSheet.present();

paymentSheet.onComplete = function(result) {
    if (result.error) {
        console.error("支付失败:", result.error.message);
    } else if (result.paymentIntent.status === "succeeded") {
        console.log("支付已确认");
    }
};

直接使用 Stripe SDK 发起支付(替代方案)

如果不需要使用 PaymentSheet,也可以直接调用 Stripe SDK 的支付确认接口获取同步回调:

iOS(Swift)

stripe.confirmPayment(
    clientSecret: clientSecret,
    paymentMethodParams: paymentMethodParams
) { result, error in
    if let error = error {
        print("支付异常: \(error.localizedDescription)")
    } else if let result = result, result.paymentIntent.status == .succeeded {
        print("支付已完成")
    }
}

Android(Kotlin)

stripe.confirmPayment(
    this,
    ConfirmPaymentIntentParams.createWithPaymentMethodId(paymentMethodId, clientSecret)
) { result ->
    if (result.isSucceeded) {
        val paymentIntent = result.intent
        if (paymentIntent.status == PaymentIntent.Status.Succeeded) {
            Log.d("Stripe", "支付已确认")
        }
    } else {
        val error = result.error
        Log.d("Stripe", "支付异常: ${error?.message}")
    }
}

Web(JavaScript)

stripe.confirmPayment({
    elements: elements,
    confirmParams: {
        return_url: "your-return-url"
    }
}).then(function(result) {
    if (result.error) {
        console.error("支付失败:", result.error.message);
    } else {
        console.log("支付已完成");
    }
});

注意:无论使用哪种方式,建议同时在后端监听 Stripe 的 webhook 事件(如 payment_intent.succeeded、payment_intent.payment_failed),客户端回调可能因网络中断或用户操作丢失状态,webhook 是更可靠的支付状态确认方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:06:32