Vue stripe_webhook : récupérer l'utilisateur
Bonsoir,
Juste une question pour être sûr de comprendre.
Pou récupérer l'utilisateur je ne passe pas par request.user car ça ne fonctionne pas sinon.
Je passe par get_object_or_404.
Si je ne peux pas passer par request.user, c'est parce que la vue est appelée quand je suis sur stripe ?
J'ai cru comprendre que j'étais dans de l'async ?
Merci d'avance
@csrf_exempt
def stripe_webhook(request):
payload = request.body
sig_header = request.META['HTTP_STRIPE_SIGNATURE']
endpoint_secret = os.getenv('endpoint_secret')
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)
# Handle the event
if event.type == 'checkout.session.completed':
data = event['data']['object']
user = get_object_or_404(Thinker, email=data['customer_details']['email'])
if not user.stripe_id:
user.stripe_id = data["customer"]
user.save()
ShippingAddresse.objects.get_or_create(
thinker=user,
name=data["shipping_details"]["name"],
city=data["shipping_details"]["address"]["city"],
country=data["shipping_details"]["address"]["country"],
line1=data["shipping_details"]["address"]["line1"],
line2=data["shipping_details"]["address"]["line2"] or "",
zip_code=data["shipping_details"]["address"]["postal_code"],
)
return HttpResponse(status=200)
Salut Gab !
C'est exactement ça :)
La raison pour laquelle on doit récupérer l'utilisateur à partir de son e-mail à partir des données envoyées par Stripe c'est parce que tu ne peux pas avoir accès au request.user comme dans le cas d'une vue classique.
Dans le cas du webhook, le contexte de la requête n'inclut pas l'utilisateur connecté, donc tu dois t'appuyer sur les informations fournies par Stripe pour retrouver l'utilisateur concerné.
Parce qu'effectivement la requête est envoyée par Stripe (quand l'utilisateur fait un paiement, Stripe reçoit des événements, et t'en envoie en retour sur l'URL de ton webhook). La requête est donc effectuée par Stripe et non pas par ton utilisateur connecté, qui lui pourrait faire des requêtes dans le contexte de ton application (dans lesquelles tu aurais donc accès à request.user).
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte