Status 404 dans le webhook de stripe
Le web_hook me renvois un status de 404 sur tout mes évenements, alors que sur ma vue stripe_webhook il est bien spécifié qu'il me retourne un status 400 en cas d'une ValueError, et un status 200 pour un checkout.session.completed.
@csrf_exempt
def stripe_webhook(request):
payload = request.body
sig_header = request.META['HTTP_STRIPE_SIGNATURE']
endpoint_secret = "whsec_de13345002dc7bc7b5b2eee23a56e5094d4bf744e6752c19280ec8d665649f35"
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)
if event['type'] == 'checkout.session.completed':
data = event['data']['object']
return completed_order(data)
# Passed signature verification
return HttpResponse(status=200)
(.env) MacBook-Pro-de-Thibaut:DocShop thibaut$ stripe listen --forward-to 127.0.0.1:8000/stripe-webhook/
A newer version of the Stripe CLI is available, please update to: v1.13.8
> Ready! You are using Stripe API Version [2022-11-15]. Your webhook signing secret is whsec_de13345002dc7bc7b5b2eee23a56e5094d4bf744e6752c19280ec8d665649f35 (^C to quit)
2023-01-12 16:52:22 --> checkout.session.expired [evt_1MPT4kFUn0aAiyLrOnt0tnTe]
2023-01-12 16:52:22 <-- [404] POST http://127.0.0.1:8000/stripe-webhook/ [evt_1MPT4kFUn0aAiyLrOnt0tnTe]
2023-01-12 16:53:21 --> charge.succeeded [evt_3MPT5fFUn0aAiyLr2hRo14j7]
2023-01-12 16:53:21 <-- [404] POST http://127.0.0.1:8000/stripe-webhook/ [evt_3MPT5fFUn0aAiyLr2hRo14j7]
2023-01-12 16:53:21 --> payment_intent.succeeded [evt_3MPT5fFUn0aAiyLr22Efq3Sn]
2023-01-12 16:53:21 <-- [404] POST http://127.0.0.1:8000/stripe-webhook/ [evt_3MPT5fFUn0aAiyLr22Efq3Sn]
2023-01-12 16:53:21 --> payment_intent.created [evt_3MPT5fFUn0aAiyLr2fFwD6KG]
2023-01-12 16:53:21 --> checkout.session.completed [evt_1MPT5hFUn0aAiyLrN4jdLBEp]
2023-01-12 16:53:21 <-- [404] POST http://127.0.0.1:8000/stripe-webhook/ [evt_3MPT5fFUn0aAiyLr2fFwD6KG]
2023-01-12 16:53:21 <-- [404] POST http://127.0.0.1:8000/stripe-webhook/ [evt_1MPT5hFUn0aAiyLrN4jdLBEp]
Est-ce normal?
Oui je l'ai ajouté :
urlpatterns = [
path('', index, name='index'),
path('admin/', admin.site.urls),
path('signup/', signup, name="signup"),
path('login/', login_user, name="login"),
path('logout/', logout_user, name="logout"),
path('stripe-webhook/', stripe_webhook, name="stripe-webhook"),
path('cart/', cart, name="cart"),
path('cart/create-checkout-session', create_checkout_session, name="create-checkout-session"),
path('cart/checkout-success', checkout_success, name="checkout-success"),
path('cart/delete/', delete_cart, name="delete-cart"),
path('product/<str:slug>/', product_detail, name="product"),
path('product/<str:slug>/add-to-cart/', add_to_cart, name="add-to-cart"),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Ok, c'est bizarre. Quelques choses à vérifier :
Dans ton fichiers de settings, dans ALLOWED_HOSTS est-ce que tu as bien 127.0.0.1 ?
Si tu te rends manuellement sur 127.0.0.1:8000/stripe_webhook/ est-ce que ça fonctionne ? (tu devrais avoir une erreur 500 car tu n'auras pas la clé HTTP_STRIPE_SIGNATURE, mais tu ne devrais pas avoir d'erreur 404 en tout cas).
Si tu peux me confirmer ces deux points déjà et on va investiguer :)
Alors pour le ALLOWED_HOSTS du settings j'avais une liste vide j'ai donc ajouté "127.0.0.1".
Par contre lorsque j'essaie d'accéder à 127.0.0.1:8000/stripe_webhook/ j'ai une KeyError
KeyError at /stripe-webhook/
'HTTP_STRIPE_SIGNATURE'
Request Method:GETRequest URL:http://127.0.0.1:8000/stripe-webhook/Django Version:4.1.5Exception Type:KeyErrorException Value:'HTTP_STRIPE_SIGNATURE'
Exception Location:/Users/thibaut/DocShop/store/views.py, line 71, in stripe_webhookRaised during:store.views.stripe_webhookPython Executable:/Users/thibaut/DocShop/.env/bin/pythonPython Version:3.9.6Python Path:['/Users/thibaut/DocShop',
'/Users/thibaut/DocShop',
'/Users/thibaut/Documents/dossier_module',
'/Users/thibaut/Docstring/Exercice/Module',
'/Library/Frameworks/Python.framework/Versions/3.9/lib/python39.zip',
'/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9',
'/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload',
'/Users/thibaut/DocShop/.env/lib/python3.9/site-packages']
Server time:Fri, 13 Jan 2023 14:40:08 +0000
Pour le KeyError oui c'est normal car tu n'as pas la clé HTTP_STRIPE_SIGNATURE (qui est envoyée par Stripe lors d'une requête pour vérifier que la requête provient de Stripe).
Je voulais juste vérifier que tu n'avais pas une erreur 404 comme Stripe mais c'est normalement une erreur 500 que tu dois avoir (si tu regardes du côté du stripe listener).
As-tu réessayé avec 127.0.0.1 dans le ALLOWED_HOST de voir si tu as toujours l'erreur 404 ?
J'ai retravaillé tout ça j'ai des status 200 pour quasiment tout mes évènements à part un mais je n'arrive pas à savoir à lequel (checkout.session.completed ou payment_intent.created), En tout cas le paiement est bien accepté lorsque je fais la procédure d'achat.
2023-01-23 16:58:11 --> charge.succeeded [evt_3MTSPNFUn0aAiyLr2JkJEc63]
2023-01-23 16:58:11 <-- [200] POST http://127.0.0.1:8000/stripe-webhook/ [evt_3MTSPNFUn0aAiyLr2JkJEc63]
2023-01-23 16:58:11 --> payment_intent.succeeded [evt_3MTSPNFUn0aAiyLr2qBBT8sh]
2023-01-23 16:58:11 <-- [200] POST http://127.0.0.1:8000/stripe-webhook/ [evt_3MTSPNFUn0aAiyLr2qBBT8sh]
2023-01-23 16:58:11 --> checkout.session.completed [evt_1MTSPPFUn0aAiyLrdlTt2O3g]
2023-01-23 16:58:11 --> payment_intent.created [evt_3MTSPNFUn0aAiyLr2QhcEqLB]
2023-01-23 16:58:11 <-- [200] POST http://127.0.0.1:8000/stripe-webhook/ [evt_3MTSPNFUn0aAiyLr2QhcEqLB]
2023-01-23 16:58:11 <-- [404] POST http://127.0.0.1:8000/stripe-webhook/ [evt_1MTSPPFUn0aAiyLrdlTt2O3g]
Salut Thibaut,
Tu n'as pas forcément besoin de traiter tous les événements, tu peux choisir sur Stripe les événements que tu veux recevoir par webhook.
Si un événement ne t'intéresse pas, tu peux l'enlever pour ne pas avoir des erreurs et éviter de tous les traiter dans ta vue :)
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte