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

如何在C#控制台应用中验证Stripe Webhook签名?

如何在C#控制台应用中验证Stripe Webhook签名?

嘿,我来帮你搞定这个控制台里验证Stripe Webhook签名的问题!其实逻辑和Web应用里大同小异,核心就是要抓准Stripe发送的几个关键信息,再用Stripe的SDK来做验证。我给你一步步拆解:

第一步:装好Stripe的C# SDK

控制台里直接用NuGet安装就行,打开Package Manager Console输入:

Install-Package Stripe.net

或者用.NET CLI的话:

dotnet add package Stripe.net

第二步:备齐三个核心数据(一个都不能错!)

你得先把这三个值从Stripe那边拿到手:

  • 原始JSON payload:就是你从Webhook API复制的那个JSON,但注意!必须是Stripe发送的原样字符串,不能格式化、不能加换行缩进,签名是基于原始字节计算的,改一点就会验证失败(这个坑我之前踩过!)
  • Stripe-Signature请求头值:你可以在Stripe Dashboard的事件详情里找到这个头,或者用Stripe CLI模拟事件时捕获到
  • Webhook密钥:在Stripe Dashboard的Webhook设置页获取,格式是whsec_xxxxxxxxxx,别和你的API密钥搞混了

第三步:写验证代码

直接用Stripe SDK提供的EventUtility.ConstructEvent方法,它会自动帮你完成签名验证,代码示例如下:

using Stripe;
using System;

class Program
{
    static void Main(string[] args)
    {
        // 替换成你实际的原始payload(别格式化!保持Stripe发的原样)
        string rawPayload = @"{""id"":""evt_123456789..."",""object"":""event"",""api_version"":""2024-06-20"",...}";
        
        // 替换成你拿到的Stripe-Signature头内容
        string stripeSignature = @"t=1719000000,v1=abcdef123456789...,v0=ghijkl098765432...";
        
        // 替换成你的Webhook密钥
        string webhookSecret = "whsec_your_real_secret_key_here";

        try
        {
            // 验证签名并构造Stripe事件对象
            var stripeEvent = EventUtility.ConstructEvent(
                payload: rawPayload,
                sigHeader: stripeSignature,
                secret: webhookSecret,
                tolerance: TimeSpan.FromMinutes(5) // 可选:允许5分钟的时间偏移,避免系统时间差导致验证失败
            );

            Console.WriteLine($"✅ 签名验证成功!事件类型:{stripeEvent.Type}");
            // 这里可以根据事件类型做后续处理,比如处理payment_intent.succeeded之类的逻辑
        }
        catch (StripeException ex)
        {
            Console.WriteLine($"❌ 签名验证失败:{ex.Message}");
            // 验证失败就别处理这个事件了,防止恶意请求
        }
    }
}

常见踩坑点提醒

  • 千万别修改payload:哪怕是加个空格或换行,都会导致签名不匹配,一定要用Stripe发送的原始字符串
  • 密钥要对应:每个Webhook端点都有自己的独立密钥,别拿错了
  • 时间差问题:如果你的系统时间和Stripe的时间差超过默认的3分钟,就会验证失败,这时候就加上代码里的tolerance参数调整允许的偏移时间

备注:内容来源于stack exchange,提问作者Kartik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:05:29