Node.js中如何在Stripe Checkout Session中传入自定义描述等参数
问题原因
你当前的配置写法本身没有语法错误,字段为空的核心原因是:payment_intent_data 下配置的所有字段,都会同步到该Checkout Session关联的Payment Intent对象中,不会直接挂载在Checkout Session对象的根属性上。如果你查询时直接读Checkout Session的description字段,必然返回空,需要先获取Session关联的Payment Intent ID,再查询对应Payment Intent对象才能拿到你设置的描述。
如果你需要自定义信息直接保存在Checkout Session对象里,或者需要关联到单个商品,应该用Stripe专门提供的metadata字段存储自定义内容。
对应解决方案
1. 需将描述存储到Payment Intent中
保持你现有的payment_intent_data.description配置,取值时展开关联的Payment Intent对象即可:
// 查询Checkout Session时添加expand参数 const session = await stripe.checkout.sessions.retrieve('你的Session ID', { expand: ['payment_intent'] }); // 即可获取到你设置的描述字段 const payDescription = session.payment_intent.description;
2. 需将自定义信息直接存储在Checkout Session中
在stripe.checkout.sessions.create的参数根节点添加metadata字段,所有自定义内容都可以放到这里,直接查询Session就能拿到:
const session = await stripe.checkout.sessions.create({ // 原有其他配置保持不变 payment_method_types: ['card'], customer_email: customer.email, // 新增Session级自定义元数据,可自定义任意键值对 metadata: { custom_description: '你要的自定义描述', customer_name: customer.name, page: customer.page }, line_items: [/* 原有商品配置不变 */], success_url: successurl, cancel_url: failedurl, }) // 取值时直接读取session.metadata即可
3. 需设置商品级自定义描述/信息
如果要给单个商品设置显示在结账页的描述,或者商品维度的自定义信息,修改line_items配置即可:
line_items: [ { price_data: { currency: 'cad', product_data: { name: customer.page, description: '自定义商品描述,会直接展示给结账用户' // 结账页可见 }, unit_amount: customer.price, }, quantity: customer.quantity, // 商品级隐藏元数据,仅后台存储可见 metadata: { product_tag: '自定义商品标签', other_info: '其他自定义内容' } } ]
注意:当前你用GET接口接收前端传的
price、quantity等交易核心参数,存在严重安全风险,用户可直接修改请求参数篡改支付金额。建议改为POST接口,所有商品价格、库存信息从后端数据库查询,仅允许前端传商品ID、用户身份等非敏感参数。
内容的提问来源于stack exchange,提问作者gianlps
相关产品推荐
相关产品推荐

