“ Stripe .net” Webhook的签名在Stripe-Signature标头中不存在。“

Dav*_*idT 5 c# asp.net webhooks stripe-payments

我正在使用NuGet的Stripe.net SDK。我总是得到

Webhook的签名在Stripe-Signature标头中不存在。

StripeEventUtility.ConstructEvent方法中的异常。

[HttpPost]
public void Test([FromBody] JObject incoming)
{
    var stripeEvent = StripeEventUtility.ConstructEvent(incoming.ToString(), Request.Headers["Stripe-Signature"], Constants.STRIPE_LISTENER_KEY);
}
Run Code Online (Sandbox Code Playgroud)

WebHook密钥正确,请求标题包含“ Stripe-Signature”密钥。

我正确地从Webhook测试器实用程序接收了传入的数据(在Visual Studio中使用nGrok)。

secureCompare方法似乎是罪魁祸首=> StripeEventUtility.cs

我试图操纵从Stripe传入的数据(Jobject,字符串,序列化...)。有效负载签名可能会引起一些问题。

有人遇到过同样的问题吗?

Stu*_*tLC 11

根据@Josh 的评论,我收到了同样的错误

Webhook 的签名不存在于 Stripe-Signature 标头中。

这是因为我错误地使用了 API 密钥(以 开头sk_)来验证EventUtility.ConstructEvent.

取而代之的是,条纹网络挂接有效载荷与网络挂钩签名密钥(开始标志whsec_)为每文档

Web Hook Signing Secret可以从获得Developers -> WebHooks页面:

网络钩子签名秘密

  • 来自@Ameya 的评论:即使使用有效的签名密钥“whsec_xxxxxx”,我也收到了相同的错误。对我来说,问题是 ASP.NET Core 3.xxx 版本不允许同步操作。所以我们必须用下面的代码来构造Stripe事件。`using (var sr = new StreamReader(this.HttpContext.Request.Body)) { json = wait sr.ReadToEndAsync(); var stripeEvent = Stripe.EventUtility.ConstructEvent(json, Request.Headers["Stripe-Signature"], this._stripeSigningSecret, 300, false);` (5认同)

Pet*_*ras 9

由于您使用的是 Stripe 仪表板中的密钥,也可能会发生该错误。如果使用 CLI 进行测试,则需要使用 stripe cli 生成的临时文件。

要获取它,请运行以下命令:

stripe listen --print-secret
Run Code Online (Sandbox Code Playgroud)