Building a Django + Stripe integration today I kept hitting the SignatureVerificationError.
According to their webhook’s documentation, they recommend something like this:
@csrf_exempt def my_webhook_view(request): payload = request.body sig_header = request.META['HTTP_STRIPE_SIGNATURE'] event = None try: event = stripe.Webhook.construct_event( payload, sig_header, endpoint_secret ) except ValueError as e: # Invalid payload return HttpResponse(status=400) except stripe.error.SignatureVerificationError as e: # Invalid signature return HttpResponse(status=400) # Do something with event return HttpResponse(status=200)
I think would work fine with python2, but in my case the signature being generated never matched the expected signature hence triggering the exception
The solution is to utf8 decode the payload, on line 3, change:
payload = request.body
payload = request.body.decode('utf-8')
That did the trick, hope it can save someone some time.