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

React Native中Stripe支付成功后如何获取交易ID

解决React Native Stripe支付后获取交易ID的问题

有两种可靠方式获取交易ID,适配你的现有代码:

方式一:客户端通过Stripe SDK获取Payment Intent详情

支付成功后,调用Stripe的retrievePaymentIntent方法,传入你已有的paymentIntentClientSecret,就能拿到完整的Payment Intent对象,其中交易ID对应charges.data[0].id字段。

修改你的openPaymentSheet函数,在支付成功分支添加获取逻辑:

const openPaymentSheet = async (paymentIntentClientSecret: string, ephemeralKey: string, stripeId: string) => {
    try {
        const { error } = await initPaymentSheet({
            customerId: stripeId,
            customerEphemeralKeySecret: ephemeralKey,
            paymentIntentClientSecret: paymentIntentClientSecret,
            merchantDisplayName: 'Workout Wallet'
        });

        if (error) {
            captureLog('Error in init payment sheet: ', error)
            Alert.alert('Error', error.message);
            return;
        }

        const { error: paymentError } = await presentPaymentSheet();
        if (paymentError) {
            captureLog('Error in payment: ', paymentError)
            Alert.alert('Error', paymentError.message);
        } else {
            // 新增:获取Payment Intent完整信息
            const { paymentIntent, error: retrieveError } = await retrievePaymentIntent(paymentIntentClientSecret);
            if (retrieveError) {
                captureLog('Failed to retrieve payment intent: ', retrieveError);
                Alert.alert('Error', 'Failed to get transaction details');
                return;
            }
            // 提取交易ID
            const transactionId = paymentIntent.charges?.data[0]?.id;
            if (transactionId) {
                // 这里调用你的业务接口,保存发票、订单、折扣等关联数据到数据库
                console.log('Transaction ID:', transactionId);
                Alert.alert('Success', 'Your payment was confirmed successfully!');
            } else {
                Alert.alert('Warning', 'Transaction ID not found');
            }
        }
    } catch (err) {
        console.log("Failed to open payment sheet: ", err);
        Alert.alert('Error', 'Failed to open payment sheet');
    }
};

方式二:通过服务器端同步交易信息(生产环境推荐)

  1. 服务器端创建Payment Intent时,将Payment Intent的ID(paymentIntent.id)返回给客户端,客户端暂存该ID。
  2. 支付成功后,客户端带着这个Payment Intent ID请求你的服务器接口。
  3. 服务器端通过Stripe API查询该Payment Intent的完整信息(包含交易ID),同时将发票、订单、折扣等业务数据与交易ID关联后存入数据库,再返回结果给客户端确认。

这种方式避免客户端直接处理敏感交易数据,安全性更高,适合生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:39:59