基于SAPUI5/Fiori与Node.js,Stripe支付成功后如何获取receipt_url?
通过Payment Intent ID获取Stripe支付凭证receipt_url
核心结论
可以直接通过Payment Intent ID获取receipt_url,无需单独查询Charge对象,具体实现如下:
1. 后端查询Payment Intent提取receipt_url
支付成功后(无论是前端确认支付完成,还是通过Stripe Webhook收到payment_intent.succeeded事件),在Node.js后端调用Stripe的Payment Intent查询接口,从返回的完整对象中提取关联Charge的receipt_url。
示例代码:
// 传入已完成支付的Payment Intent ID const paymentIntentId = "pi_xxxxxxxxxxxx"; // 查询Payment Intent详情 const paymentIntent = await stripe.paymentIntents.retrieve( paymentIntentId, { apiKey: secretKey } ); // 提取第一个关联Charge的receipt_url(支付成功后必然存在) const receiptUrl = paymentIntent.charges.data[0].receipt_url; // 返回给前端用于重定向 res.send({ receiptUrl });
2. 为什么创建Payment Intent时拿不到receipt_url?
receipt_url是支付成功后Stripe才生成的凭证链接,创建Payment Intent时支付流程尚未完成,因此该字段不会出现在创建接口的响应中,必须等待支付状态变为succeeded后才能获取。
3. 推荐的生产级流程
- Webhook监听方案(更可靠):在Stripe后台配置Webhook,监听
payment_intent.succeeded事件,收到事件后将receipt_url存入你的业务数据库,前端后续通过查询接口获取该链接。 - 前端触发查询方案:前端完成支付后,调用后端接口传入Payment Intent ID,后端验证支付状态为
succeeded后返回receipt_url,前端立即跳转。
内容的提问来源于stack exchange,提问作者Saurabh V
相关产品推荐
相关产品推荐

