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

.NET环境下如何提取Stripe Webhook返回Session对象中的Metadata

解决方案

1. 提取Metadata的正确写法

你当前获取到的stripeEvent.Data.Object是泛型接口类型,需要先转换为对应的Checkout.Session具体类型才能访问Metadata属性,代码示例如下:

var json = await new StreamReader(HttpContext.Request.Body).ReadToEndAsync();
try
{
    // 校验Stripe事件合法性
    var stripeEvent = EventUtility.ConstructEvent(json,Request.Headers["Stripe-Signature"], endpointSecret);

    // 处理checkout.session.completed事件
    if (stripeEvent.Type == Events.CheckoutSessionCompleted)
    {
        // 转换为具体的Checkout Session类型
        var session = stripeEvent.Data.Object as Stripe.Checkout.Session;
        if (session == null) 
        {
            // 可根据业务需求添加异常处理逻辑
            return BadRequest();
        }
        // 直接访问Metadata,本质是Dictionary<string, string>类型
        var yourMetaDataValue = session.Metadata["你定义的Metadata键名"];
        // 后续订单履约、数据库更新逻辑
    }
    // 其他事件处理逻辑
    return Ok();
}
catch (StripeException e)
{
    return BadRequest();
}

更安全的写法可以用模式匹配简化判空逻辑:

if (stripeEvent.Data.Object is Stripe.Checkout.Session session)
{
    var metaValue = session.Metadata["你的键名"];
}

2. IHasObject定义说明

IHasObject是Stripe官方.NET SDK中定义的通用接口,所有事件关联的业务实体(包括Checkout Session、Payment Intent、Customer等)都实现了这个接口。该接口仅封装了所有实体通用的基础方法和属性,不包含具体业务实体的特有属性(比如Session的Metadata),所以必须将其转换为对应的具体业务类后才能访问专属属性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:18:03