Fig*_*ode 5 python django stripe-payments
当 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)
Run Code Online (Sandbox Code Playgroud)
但奇怪的是,这给我带来了错误,不知道为什么?
Jus*_*ael 16
Stripe 库需要 Webhook 请求的原始正文才能进行签名验证。看来你正在供应request.POST,这是正文的修改版本。
如果您使用request.body它,它应该按预期工作。
小智 5
就我而言,为了解决我的问题,我解码了主体:
payload = request.body.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)