Stripe迁移:Charge API的bank_account类型在Payments API中的等价物是什么?
Stripe Source API 转 Payments API:银行账户支付方式适配方案
问题背景
正在将代码库从Stripe Source API迁移至Payments API,Charge读取逻辑中,原Source API通过source.object判断card/bank_account两种支付方式,其中card已适配为payment_method_details.type='card',但找不到bank_account对应的Payments API类型及字段,需要适配指导。
原Source API代码示例:
const source = charge.source; // charge is of type Stripe.Charge if (source.object === 'card') { let month = source.exp_month; let lastFour = source.last4; ... } else if (source.object === 'bank_account') { let bank = source.metadata.bank; let fingerprint = source.fingerprint; ... } else { ... }
迁移中待适配代码:
const paymentMethodDetails = charge.payment_method_details; // charge is of type Stripe.Charge if (paymentMethodDetails.type === 'card') { let month = paymentMethodDetails.card.exp_month; let lastFour = paymentMethodDetails.card.last4; ... } else if (paymentMethodDetails.type === ?????) { // <-- 待填充类型 let bank = paymentMethodDetails.?????? // <-- 待填充字段 let fingerprint = paymentMethodDetails.?????? // <-- 待填充字段 ... } else { ... }
适配方案
在Payments API中,原bank_account类型对应区域化的银行账户支付方式类型,核心适配规则如下:
类型匹配
原source.object='bank_account'根据业务覆盖的地区,对应不同的payment_method_details.type值:- 美国银行账户:
us_bank_account - 澳大利亚银行账户:
au_becs_debit - 欧盟银行账户:
sepa_debit - 英国银行账户:
gb_bacs_debit
- 美国银行账户:
字段映射
原Source API字段 Payments API对应字段 source.metadata.bank(自定义元数据)payment_method_details.[类型].metadata.bank银行名称(原需自定义存储) payment_method_details.[类型].bank_name(官方提供)source.fingerprintpayment_method_details.[类型].fingerprint适配后代码示例
const paymentMethodDetails = charge.payment_method_details; // charge is of type Stripe.Charge if (paymentMethodDetails.type === 'card') { let month = paymentMethodDetails.card.exp_month; let lastFour = paymentMethodDetails.card.last4; ... } else if (['us_bank_account', 'au_becs_debit', 'sepa_debit'].includes(paymentMethodDetails.type)) { const bankAccountDetails = paymentMethodDetails[paymentMethodDetails.type]; // 优先取自定义元数据,无则用官方提供的银行名称 let bank = bankAccountDetails.metadata?.bank || bankAccountDetails.bank_name; let fingerprint = bankAccountDetails.fingerprint; ... } else { ... }
内容的提问来源于stack exchange,提问作者risingTide
相关产品推荐
相关产品推荐

