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

如何从Stripe checkout.session.expired事件中获取客户邮箱?

解决Stripe支付链接过期会话无法获取用户邮箱的问题

核心原因

你当前的支付链接配置了customer_creation: if_required,这个模式下只有用户完成付款时才会创建客户记录并收集邮箱信息。如果用户中途放弃,Stripe不会留存任何未完成会话的用户身份数据,这就是所有客户字段显示null的原因。

可行解决方案

1. 修改支付链接的客户创建规则

在Stripe后台编辑支付链接时,调整以下设置:

  • 找到「客户信息」板块,将客户创建规则改为始终创建客户
  • 勾选「要求客户提供邮箱」并设为必填
    这样即使用户没完成付款,Stripe也会创建客户记录并留存邮箱,后续checkout.session.expired事件里就能拿到customer_email字段,或者通过customerID调用API获取邮箱。

2. 自定义嵌入结账流程提前收集邮箱

如果用Stripe.js自行集成结账功能,可以在初始化会话时强制收集邮箱,或者预先传入从你网站表单获取的用户邮箱:

const session = await stripe.checkout.sessions.create({
  payment_method_types: ['card'],
  line_items: [{ price: 'price_123', quantity: 1 }],
  mode: 'payment',
  customer_creation: 'always',
  customer_email: userEmailFromYourSiteForm, // 可选:预先传入已收集的邮箱
  success_url: 'https://your-site.com/success',
  cancel_url: 'https://your-site.com/cancel',
});

这种方式下,用户放弃付款后,会话对象里也会保留邮箱信息。

3. 添加自定义必填字段收集邮箱

在支付链接的设置里添加自定义表单字段:

  • 找到「自定义字段」选项,新增「邮箱地址」字段并设置为必填
    用户必须填写邮箱才能进入结账环节,Stripe会把该信息关联到会话中,过期事件里可通过custom_fields字段提取邮箱。

注意事项

  • 以上设置仅对修改后新创建的支付链接/会话生效,之前的过期会话无法追溯邮箱
  • 收集用户邮箱需符合隐私法规(如GDPR),要在隐私政策中明确告知用途

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:06:06