如何使用Stripe的payment_intent_data实现付款成功后向客户发送邮件
配置未生效的常见原因和修复方案
你当前的配置未生效通常由几个常见问题导致,按优先级排查修改即可:
- 未开启Stripe后台自动发件开关
这是最常见的遗漏项,Stripe默认不会自动发送付款收据,需要手动开启:登录Stripe管理后台,依次进入「设置」-「客户通信」-「收据」板块,打开「付款成功后自动发送收据」的开关。 - 测试模式限制
Stripe测试环境下,使用测试卡号完成的付款默认不会触发自动邮件发送。你可以切换到生产环境验证,或者在Stripe后台找到对应测试交易的Payment Intent详情页,点击「发送收据」按钮手动触发,验证邮箱可正常收件。 - 邮箱被拦截
先检查收件邮箱的垃圾邮件、推广邮件分类文件夹,确认收据邮件没有被服务商拦截。 - 不需要硬编码固定邮箱
如果你的需求是将收据发送到用户在结账页面填写的邮箱,不需要在payment_intent_data.receipt_email写死固定地址,只要开启后台开关,Stripe会自动获取用户结账时输入的邮箱作为收件地址,无需额外配置。
如果你确实需要指定固定收件邮箱,或者动态传入客户预留在你站点的邮箱,修改后的参考代码如下:
app.post('/create-checkout-session', async (req, res) => { try { // 可从前端请求体中获取当前登录用户的预留邮箱 const { customerEmail } = req.body; const session = await stripe.checkout.sessions.create({ payment_method_types: ['card'], payment_intent_data: { // 优先使用用户预留邮箱,没有的话填充默认值 receipt_email: customerEmail || "test@test.com" }, // 可选配置:传入customer_email参数,结账页会自动填充该邮箱,减少用户输入 customer_email: customerEmail, shipping_rates: ['shr_1JgbJxAuqIBxGbL5lCkeLyfu'], shipping_address_collection: { allowed_countries: ['FI'], }, line_items: [ { price_data: { currency: 'eur', product_data: { name: 'book', }, unit_amount: 6200, }, quantity: 2, }, ], mode: 'payment', success_url: 'http://localhost:4200/myynti/success', cancel_url: 'http://localhost:4200/myynti/cancel', }); res.json({ id: session.id }); } catch (err) { res.status(400).json({ error: err.message }) } });
内容的提问来源于stack exchange,提问作者M.Y.
相关产品推荐
相关产品推荐

