React Native+Firebase+Stripe打车应用支付流程及API选型咨询
问题解答
流程合理性
这个流程完全合理,既贴合打车场景的用户体验需求,也符合Stripe的合规规则:
- 单次3DS认证后续免密,避免重复验证打扰用户
- 司机确认行程完成后再扣款,匹配打车服务的交易逻辑,能有效减少误扣款纠纷
- 预先完成卡验证与认证,后续扣款的成功率更高
推荐流程方案
核心逻辑
通过Stripe的Setup Intent完成首次卡添加与3DS认证,将验证后的支付方式绑定到用户的Stripe Customer对象上,后续行程直接通过该Customer发起扣款,无需再次认证(仅当Stripe检测到高风险交易时才会触发二次验证,属于系统自动逻辑)。
用户端首次添加银行卡流程
- 后端(Firebase Functions)调用Stripe API创建
SetupIntent,指定payment_method_types: ['card']并开启3DS要求(设置payment_method_options.card.setup_future_usage: 'off_session') - React Native端使用Stripe SDK的
CardField组件安全收集用户银行卡信息 - 调用SDK的
confirmSetupIntent方法完成3DS认证(SDK会自动拉起适配移动端的3DS验证界面) - 认证通过后,后端将生成的
PaymentMethod附加到用户对应的StripeCustomer对象上,并将Customer ID存储到Firebase的用户文档中
后续行程扣款流程
- 用户下单后,Firebase创建行程记录,关联用户信息与行程金额
- 司机端标记行程完成后,触发Firebase Functions的扣款逻辑
- 后端调用Stripe API创建
PaymentIntent,指定金额、货币,并关联用户的Stripe Customer ID(Stripe会自动使用该Customer的默认支付方式) - 扣款完成后,将结果同步到Firebase的行程记录中
需要使用的Stripe API
- Setup Intent相关:
POST /v1/setup_intents:创建用于卡验证与3DS认证的SetupIntentPOST /v1/setup_intents/{id}/confirm:确认SetupIntent(React Native SDK会自动封装调用)
- Customer相关:
POST /v1/customers:为每个用户创建唯一的Stripe Customer对象POST /v1/customers/{customer_id}/payment_methods:将验证后的PaymentMethod附加到Customer
- Payment Intent相关:
POST /v1/payment_intents:创建并发起扣款(指定customer参数即可关联已绑定的支付方式)
- React Native SDK组件/方法:
CardField:安全收集银行卡信息confirmSetupIntent:处理3DS认证流程
内容的提问来源于stack exchange,提问作者keatwei
相关产品推荐
相关产品推荐

