Stripe调用定义的Web挂钩时出现以下错误
未找到与负载的预期签名匹配的签名
我正在关注这篇文章:https://stripe.com/docs/billing/subscriptions/checkout#provision-and-monitor
我有下面的代码:
@csrf_exempt
def saaswebhookview(request):
try:
stripe.api_key = settings.STRIPE_SECRET_KEY
webhook_secret = 'stripe_key'
request_data = request.POST
if webhook_secret:
try:
signature = request.headers.get('stripe-signature')
# signature = request.META['stripe-signature']
event = stripe.Webhook.construct_event(
payload=request.POST, sig_header=signature, secret=webhook_secret)
data = event['data']
except Exception as e:
print(str(e))
return JsonResponse({'status': 'error', 'error': str(e)})
event_type = event['type']
else:
data = request_data['data']
event_type = request_data['type']
data_object = data['object']
if event_type == 'checkout.session.completed':
print(data)
elif event_type == 'invoice.paid':
print(data)
elif event_type == 'invoice.payment_failed':
print(data)
else:
print('Unhandled event type {}'.format(event_type))
return JsonResponse({'status': 'success'}, safe=False)
except Exception as e:
return JsonResponse({'status': 'success', 'error': str(e)}, safe=False)
但奇怪的是,这给我带来了错误,不知道为什么?
4条答案
按热度按时间watbbzwu1#
Stripe库需要webhook请求的原始主体才能进行签名验证。看起来您提供的是
request.POST
,这是主体的修改版本。如果使用
request.body
,它应该按预期工作。zxlwwiss2#
使用生成的签名验证Stripe Webhook API的脚本
P.S.如果您想将其用于单元测试/Django测试客户端,您需要将HTTP_ prefix添加到签名标头
3z6pesqy3#
在我的例子中,为了解决我的问题,我解码了身体:
moiiocjp4#
在我的情况下,我使用的秘密从stripe-cli。
相反,去webhook部分,点击你的webhook,最后点击
reveal secret
。这将显示你想要的秘密。