Stripe: "Не найдено подписей, соответствующих ожидаемой подписи для полезной нагрузки" с использованием фреймворка Django Rest и request.body
Я интегрирую Stripe webhooks в свой API, который построен на платформе Django Rest Framework (DRF). Вот мой вид webhook:
class StripeWebhookView(APIView):
permission_classes = [AllowAny] # Public webhook
def post(self, request, *args, **kwargs):
payload = request.body
sig_header = request.headers.get('stripe-signature')
try:
event = stripe.Webhook.construct_event(
payload=payload,
sig_header=sig_header,
secret=settings.STRIPE_SIGNING_SECRET
)
except ValueError as e:
print(f"Invalid payload: {e}")
return Response(status=status.HTTP_400_BAD_REQUEST)
except stripe.error.SignatureVerificationError as e:
print(f"Signature verification failed: {e}")
return Response(status=status.HTTP_400_BAD_REQUEST)
# ... webhook logic ...
return Response(status=200)
Я получаю:
[...] " POST /webhooks/stripe-вебхук/ HTTP/1.1" 200 0
[...] "POST /webhooks/stripe-вебхук/ HTTP/1.1" 200 0
[...] "POST /webhooks/stripe-вебхук/ HTTP/1.1" 200 0
[...] "POST /webhooks/stripe-вебхук/ HTTP/1.1" 200 0
[...] "POST /webhooks/stripe-вебхук/ HTTP/1.1" 200 0
[...] "POST /webhooks/stripe-webhook/ HTTP/1.1" 200 0
Неверная подпись: не найдено подписей, соответствующих ожидаемой подписи для полезной нагрузки
Неверный запрос: /webhooks/stripe-webhook/
[...] "СООБЩЕНИЕ /webhooks/stripe-webhook/ HTTP/1.1" 400 0
Я уже дважды проверил, что мой STRIPE_SIGNING_SECRET указан правильно, и моя конечная точка правильно настроена на панели управления Stripe. Я использую request.вводите данные напрямую (не request.data), как предлагалось в других ответах, но ошибка сохраняется.
Кто-нибудь успешно использовал Stripe webhooks с фреймворком Django Rest и смог пройти проверку подписи?
Я внимательно прочитал и перепробовал все решения, упомянутые в этом сообщении Я использую request.тело (не request.data) для получения необработанной полезной нагрузки
- Мой URL-адрес webhook является общедоступным и доступен через ngrok, HTTPS, без брандмауэров
- Секрет подписи Stripe копируется непосредственно из dashboard/CLI
- Я тестировал Stripe CLI и Dashboard как в тестовом, так и в реальном режиме времени
У вас была возможность ознакомиться с руководством Stripe по устранению ошибок проверки подписи? Кроме того, было бы полезно регистрировать полезную нагрузку и заголовки запросов, которые вы получаете. Если вы еще этого не сделали, регистрация этих значений может помочь выявить любые несоответствия, которые могут быть причиной ошибок проверки подписи.
Для вашей справки, вот соответствующая ссылка на руководство: