我正在使用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 ......)。有效负载签名可能会导致一些问题。
有人有同样的问题吗?
答案 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
: