Stripe .net“Stripe-Signature标头中没有webhook的签名。”

时间:2017-09-27 15:14:27

标签: c# asp.net stripe-payments webhooks

我正在使用NuGet的Stripe.net SDK。

总是得到

  

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

来自StripeEventUtility.ConstructEvent方法的

异常。

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

WebHook密钥正确,请求标头包含“条带签名”密钥。

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

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

我试图操纵Stripe的传入数据(Jobject,string,serializing ......)。有效负载签名可能会导致一些问题。

有人有同样的问题吗?

2 个答案:

答案 0 :(得分:1)

我不确定这是什么原因,但从 Request.Body 读取的 Json 与使用 [FromBody] 解析并序列化为字符串的结构略有不同。

此外,您需要删除 [FromBody] JObject incoming,因为这样 Request.Body 将为空。

您需要的解决方案是:

[HttpPost]
public void Test()
{
    string bodyStr = "";
    using (var rd = new System.IO.StreamReader(Request.Body))
      {
          bodyStr = await rd.ReadToEndAsync();
      }
    var stripeEvent = StripeEventUtility.ConstructEvent(bodyStr, Request.Headers["Stripe-Signature"], Constants.STRIPE_LISTENER_KEY);
}

答案 1 :(得分:0)

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

  

Stripe-Signature标头中没有Webhook的签名。

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

相反,Stripe WebHook有效负载是带有Web Hook签名秘密(以per the docs开头的Web Hook签名密钥的标志)

可以从whsec_页获得Web Hook Signing Secret

Web Hooks Signing Secret