Django / Stripe - Webhook не найден
Я пытаюсь установить веб-хук с stripe. (первый раз)
Однако, похоже, путь к вебхуку не найден.
В надежде, что кто-нибудь сможет принести пару свежих глаз и сказать мне, что я делаю не так.
В моем urls.py (уровень проекта)
urlpatterns = [
path('my_app/', include('my_app.urls')),
...
]
В urls.py уровень приложения:
urlpatterns = [
..
path('stripe_webhook/', views.stripe_webhook, name='stripe_webhook')
]
В моем файле views.py (уровень my_app):
@csrf_exempt
def stripe_webhook(request):
print("enter webhook")
stripe.api_key = settings.STRIPE_SECRET_KEY_TEST
payload = request.body
signature_header = request.META.get('HTTP_STRIPE_SIGNATURE')
webhook_secret = settings.STRIPE_WEBHOOK_SECRET_TEST
...
В полосе, в местных слушателях я зарегистрировал:
localhost:8000/stripe_webhook/
Если я запускаю stripe trigger customer.created
. я получаю следующее сообщение:
A newer version of the Stripe CLI is available, please update to: v1.22.0
Setting up fixture for: customer
Running fixture for: customer
Trigger succeeded! Check dashboard for event details.
Однако, запуская одновременно stripe listen --forward-to localhost:8000/stripe_webhook/
, я также получаю следующие журналы:
> Ready! You are using Stripe API Version [2024-09-30.acacia]. Your webhook signing secret is XXXXX (^C to quit)
2024-12-05 22:27:54 --> customer.created [xxx]
2024-12-05 22:27:54 <-- [404] POST http://localhost:8000/stripe_webhook/ [xx]
и журналы моего сервера также вернутся (будь то производственный или локальный): Not Found: /stripe_webhook/
.
Это заставляет меня думать, что путь к моему вебхуку настроен неправильно, но я не вижу ничего, что я мог бы упустить. Может быть, я что-то забыл в платформе Stripe?
Примечание: все мои ключи (STRIPE_PUBLIC_KEY_TEST
, STRIPE_SECRET_KEY_TEST
и STRIPE_WEBHOOK_SECRET_TEST
) в моем .env файле совпадают с ключами, предоставленными на платформе Stripe.
Есть мысли?
Мне кажется, что вы предваряете URL-адреса ваших приложений символом my_app/
, поэтому я ожидал бы, что он будет указан в конечном URL-адресе. У меня давняя (3 с лишним года) интеграция Django со Stripe, и когда я проверяю свой корневой файл urls.py
, то вижу, что URL моего основного приложения указан так
path('', include('payments.urls')),
Это позволяет избежать необходимости включать префикс приложения, поэтому localhost:8000/webhooks/
работает для меня.
Поскольку вы указали my_app/
, вам следует попробовать localhost:8000/my_app/stripe_webhook
. Вы можете использовать CLI для запуска событий webhook, чтобы проверить, работает ли это.
Другой подход, который мне нравится использовать, - это добавить проверку метода API в мою функцию webhook и отвечать на GET-запрос чем-то вроде <h1>Hello Webhook!</h1>
. Что-то вроде этого:
@csrf_exempt
def stripe_webhook(request):
if request.method == "GET":
# Respond with webpage indicating success
else:
# Do webhook-y stuff here
Таким образом, вы сможете легко проверить, работает ли маршрут, введя URL в веб-браузер.