如何将Stripe Checkout Session自定义字段纳入生成的发票?
解决方案
方法1:把自定义字段同步到Checkout Session的metadata,再配置发票模板显示
这是最省心的方案,不用改结账流程,只需要调整Session创建逻辑和后台发票模板:
第一步:创建Checkout Session时同步自定义字段到
metadata
如果你的自定义字段是客户在进入Checkout页面前就填好的,或者你能在前端拿到Checkout页面里客户输入的字段值,调用Stripe API创建Session时,把这些值塞进metadata参数里就行:// Node.js后端创建Checkout Session示例 const session = await stripe.checkout.sessions.create({ payment_method_types: ['card'], line_items: [/* 你的商品列表 */], mode: 'payment', success_url: 'https://yourdomain.com/success', cancel_url: 'https://yourdomain.com/cancel', // 把自定义字段同步到metadata metadata: { customer_note: req.body.customerNote, // 客户填的备注 order_ref: req.body.orderRef // 自定义订单号 } });要是你用的是Stripe Checkout原生的
custom_fields(就是Checkout页面里自带的输入框),那最好让客户先在你的页面填好这些字段,再跳转去Stripe Checkout,这样就能提前把值传到后端,塞进Session的metadata里。第二步:在Stripe后台配置发票模板显示metadata字段
登录Stripe后台,按这个路径操作:- 设置 → 发票设置 → 发票模板
- 选择你正在使用的模板,点击编辑
- 找到自定义字段区域,点击添加自定义字段
- 填写字段显示名称(比如“客户备注”),然后选择对应的metadata键(比如
customer_note) - 保存设置
之后客户完成结账生成的发票,就会自动显示这些自定义字段和对应的值了。
方法2:用invoice_creation参数预设发票自定义字段(适合固定字段)
如果你的自定义字段是固定值(比如内部订单编号),可以直接在创建Checkout Session时指定发票的自定义字段:
const session = await stripe.checkout.sessions.create({ // 其他必要参数... invoice_creation: { enabled: true, invoice_data: { custom_fields: [ { name: '内部订单号', value: 'ORD-2024-0001' } ] } } });
这种方式适合不需要客户输入的固定字段,填好后会直接显示在发票上,不用额外配置模板。
注意事项
- 要是你非得用Stripe Checkout内置的
custom_fields(客户在Checkout页面填写),而且没法提前收集值,那可以试试在checkout.session.completedwebhook里调用Stripe API更新发票的metadata,但要注意:只有草稿状态的发票才能修改。如果是一次性支付的Checkout,付款完成后发票会自动定稿,这时候就改不了了。所以这种情况还是建议让客户先在你的页面填好自定义字段,再跳转去Stripe Checkout。
内容的提问来源于stack exchange,提问作者Escher
相关产品推荐
相关产品推荐

