Node.js后端确认Stripe PaymentIntent时设置billing_address的方法
Node.js 后端配置 Stripe Payment Intent 账单地址实现方案
stripe.paymentIntents.confirm 接口本身不支持传入billing_details参数,不需要通过创建关联Customer的方式绕路实现,直接在Payment Intent的创建或更新阶段传入地址配置即可。
具体实现方式
创建Payment Intent时直接配置(推荐)
初始化Payment Intent时就把账单地址写入billing_details字段,后续确认支付时会自动携带该信息,TypeScript示例代码如下:import Stripe from 'stripe'; const stripe = new Stripe('你的Stripe秘钥', { apiVersion: '2024-06-20' }); const paymentIntent = await stripe.paymentIntents.create({ amount: 19900, // 金额单位为分 currency: 'cny', payment_method_types: ['card'], // 账单地址配置 billing_details: { name: '测试用户', email: 'test@example.com', phone: '13800000000', address: { line1: '科技园路100号', line2: 'A座15层', city: '深圳', state: '广东', postal_code: '518000', country: 'CN' } } });已创建的Payment Intent更新地址
如果Payment Intent已经生成,在调用confirm接口前,先调用update接口写入billing_details即可:// 先更新账单地址 await stripe.paymentIntents.update('pi_你的支付意图ID', { billing_details: { address: { line1: '新地址99号', city: '广州', postal_code: '510000', country: 'CN' }, name: '新用户名' } }); // 更新完成后再执行确认操作 await stripe.paymentIntents.confirm('pi_你的支付意图ID');
常见踩坑说明
- 关联Customer时配置的Customer地址不会自动同步到Payment Intent的
billing_details字段:Customer上的地址属于客户档案独立数据,Payment Intent不会主动拉取填充,需要你自行读取Customer地址后显式传入Payment Intent的对应参数。 - 如果confirm时传入了带
billing_details的新支付方式(payment_method),新值会覆盖之前在Payment Intent上配置的地址,这种场景建议要么提前把地址绑定到对应支付方式上,要么在支付确认完成后再读取最终的billing_details值同步到自有数据库。 - 单元测试场景下,测试环境对
billing_details字段没有额外校验,只要按格式传入合法值,后续查询Payment Intent时就能拿到你配置的地址数据,完全可以满足测试和数据同步需求。
内容的提问来源于stack exchange,提问作者Matthew Keller
相关产品推荐
相关产品推荐

