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

Stripe SessionCreateOptions设置的client_reference_id未在Webhook返回

问题排查与解决方案

针对你遇到的checkout.session.completed事件中client_reference_id为null的问题,可按以下步骤排查:

1. 验证创建Session时ClientReferenceId的实际值

你的Action标记了[AllowAnonymous],这可能导致User.Identity.GetUserId()返回null——如果用户未登录,这个值本身就是空的,自然无法传到Stripe事件中。

在创建Session后添加日志,确认ClientReferenceId是否被正确赋值:

var session = service.Create(options);
// 打印或记录该值,验证是否为预期的用户ID
Console.WriteLine($"Session ClientReferenceId: {session.ClientReferenceId}");

如果这里输出null,说明用户未登录,GetUserId()无法获取有效ID。此时需移除[AllowAnonymous],确保仅登录用户可调用该接口:

[HttpPost]
// 移除[AllowAnonymous],限制登录用户访问
public ActionResult SendToCheckout(ProcessPaymentViewModel model)
{
    if (!User.Identity.IsAuthenticated)
    {
        return RedirectToAction("Login", "Account");
    }
    // 剩余代码不变
}

2. 检查Stripe .NET SDK版本

旧版本的Stripe.NET可能存在字段映射问题,导致ClientReferenceId无法正确同步到Stripe后台。通过NuGet将SDK更新至最新稳定版:

Install-Package Stripe.net -Version [最新版本号]

3. 确认Webhook的API版本

Stripe Webhook事件的API版本需支持返回client_reference_id(2020-08-27及以后的版本均支持):

  • 登录Stripe Dashboard,进入Developers > Webhooks
  • 找到你的Webhook端点,点击"Edit"
  • 在"API version"下拉框中选择最新稳定版本,保存更改

4. 检查Webhook事件原始Payload

在Stripe Dashboard的Webhook日志中,查看checkout.session.completed事件的原始JSON:

  • 如果Payload中没有client_reference_id,说明创建Session时该字段未正确传入,回到第一步排查
  • 如果Payload中有该值但代码解析为null,需检查Webhook处理代码的模型映射是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:05:30