You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Stripe支付后无法通过API获取客户邮箱问题求助

解决Stripe API无法获取客户邮箱的问题

核心问题

你的代码存在两个关键问题:

  1. 创建Checkout Session时未配置强制收集客户邮箱,也没确保Stripe将邮箱关联到会话/客户对象
  2. 在Session刚创建就立刻查询邮箱,此时用户还未完成支付,相关字段尚未被填充

具体解决方案

1. 修改Checkout Session创建配置,强制收集并关联邮箱

更新stripe.checkout.sessions.create的参数,添加以下关键配置,确保Stripe收集邮箱并关联到客户和支付记录:

const session = await stripe.checkout.sessions.create({
    line_items: [
        {
            price: priceID,
            quantity: 1,
        },
    ],
    mode: 'payment',
    // 把session_id作为参数传到成功页,方便后续查询
    success_url: `${YOUR_DOMAIN}?success=true&session_id={CHECKOUT_SESSION_ID}`,
    cancel_url: `${YOUR_DOMAIN}?canceled=true`,
    customer_creation: 'always', // 强制为每个支付创建客户对象
    payment_intent_data: {
        // 自动将客户邮箱填充到receipt_email,同时发送收据
        receipt_email: '{{CHECKOUT_SESSION_CUSTOMER_EMAIL}}',
    },
    // 可选:如果前端能提前获取邮箱,直接传入这里;否则Stripe会在支付页强制收集
    customer_email: req.body.email,
});

2. 支付成功后再查询邮箱,不要在Session创建时立即查询

Session刚创建时,用户还没完成支付,customer_email等字段都是空的。正确流程是:

  • 用户支付成功后,前端从success_url的参数中拿到session_id
  • 前端调用后端新增的查询接口,传入session_id获取邮箱

新增后端查询接口:

app.get('/get-session-details', async (req, res) => {
    const sessionId = req.query.session_id;
    try {
        // 展开customer对象,直接获取关联的客户邮箱
        const session = await stripe.checkout.sessions.retrieve(sessionId, {
            expand: ['customer']
        });
        res.json({
            customerEmail: session.customer.email,
            receiptEmail: session.payment_intent?.receipt_email
        });
    } catch (err) {
        res.status(400).json({ error: err.message });
    }
});

3. 废弃低效的查询方式

你之前用stripe.customers.list()遍历所有客户、stripe.charges.list()查询最近订单的方式完全不可取:

  • 生产环境客户数量多的时候,遍历所有客户会严重影响性能
  • 无法准确对应到当前支付的客户

验证方法

支付完成后,调用上述/get-session-details接口,传入成功页拿到的session_id,就能获取到客户邮箱。同时在Stripe后台查看对应的客户和支付记录,邮箱会被正确填充。

内容的提问来源于stack exchange,提问作者VietThanh Sai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:42:39