Stripe API问题:无法从部分PaymentIntent对象获取价格/计划信息
解决Stripe Link生成的PaymentIntent获取Price/Plan ID问题
Stripe Link生成的一次性支付PaymentIntent,本身不会携带invoice或line_items字段(这些字段仅用于订阅/发票驱动的支付场景),且line_item_group是Stripe内部私有字段,公开API不支持获取。要拿到对应的Price/Plan ID,可按以下两种场景处理:
1. 场景:PaymentIntent通过Stripe Payment Link创建
你已经在API调用中展开了data.payment_page字段,这个字段对应创建该PaymentIntent的Payment Link对象。从payment_page.line_items里可以直接提取关联的Price ID:
paymentsPage.data.forEach(paymentIntent => { if (paymentIntent.payment_page) { const linkedPriceIds = paymentIntent.payment_page.line_items.data.map(item => item.price.id); // 此处可获取该Payment Link关联的所有Price ID } });
2. 场景:PaymentIntent是用户通过Stripe Link作为支付方式完成的自定义一次性支付
这种场景下,PaymentIntent没有天然关联的定价信息,需要你在创建PaymentIntent时主动通过metadata字段存入Price/Plan ID:
创建时的代码示例:
const paymentIntent = await stripeClient.paymentIntents.create({ amount: 999, currency: 'usd', payment_method_types: ['link', 'card'], metadata: { price_id: 'price_XXXXXX', // 若需关联Plan,也可存入plan_id: 'plan_XXXXXX' }, });
查询PaymentIntent时,直接从metadata中读取:
paymentsPage.data.forEach(paymentIntent => { const targetPriceId = paymentIntent.metadata.price_id; if (targetPriceId) { // 使用获取到的Price ID } });
3. 区分订阅与Link支付的PaymentIntent
你已展开的data.invoice.subscription字段适用于订阅生成的PaymentIntent:这类Intent会有非空的invoice字段,从invoice.line_items中即可提取对应Plan/Price ID;而Link支付的Intent则按上述两种场景处理即可。
内容的提问来源于stack exchange,提问作者haberdasher
相关产品推荐
相关产品推荐

