如何在Node.js中实现Stripe授权时设置平台费并调整扣款金额?
报错核心原因
application_fee_amount是Stripe Connect分账功能的专属参数,根据Stripe的规则,该参数仅支持在自动捕获的直连转账PaymentIntent创建时、或者手动捕获PaymentIntent的调用环节传入,你在创建手动预授权PaymentIntent时直接传递该参数,不符合参数校验规则,因此触发报错。
解决方案
1 调整预授权PaymentIntent创建逻辑
移除创建参数中的application_fee_amount字段,如果你是对接供需双方的平台场景,需要额外增加transfer_data参数指定服务提供方的Connect商户ID,代码调整如下:
let obj = { amount: convertToCents(data.amount), currency: 'usd', payment_method_types: ['card'], capture_method: 'manual', payment_method: data.payment_method, customer: data.customer, confirm: true, // 仅Connect平台场景需要加以下参数,普通单商户场景无需添加 transfer_data: { destination: '你的服务提供方Connect商户ID', } } console.log(obj); const paymentIntent = await stripe.paymentIntents.create(obj);
2 确认服务完成后,捕获资金时传入平台费参数
待双方确认服务交付完成,执行资金划扣时,调用PaymentIntent捕获接口,此时再传入application_fee_amount参数即可正常生效,代码示例:
const capturedIntent = await stripe.paymentIntents.capture( paymentIntent.id, { application_fee_amount: convertToCents(data.amount * 0.05), // 5%平台费在此处传递 // 如果你需要部分扣款,可以加amount_to_capture参数指定实际扣款金额,全额扣款可以省略该参数 } );
其他说明
- 如果你并非多商户对接的平台场景,仅为单一商户收款,不需要使用
application_fee_amount参数,直接在后续内部账务中拆分收入即可 - 平台费金额不可超过本次捕获的总金额,否则会触发参数校验错误
- 需提前完成Stripe Connect服务的开通和资质审核,否则分账相关参数无法正常使用
内容的提问来源于stack exchange,提问作者Sachin Shah
相关产品推荐
相关产品推荐

