Résolue

Vue stripe_webhook : récupérer l'utilisateur

# Stripe # Django # API

Gabriel Trouvé

Mentor

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).

Gabriel Trouvé

Mentor

Super merci !

Au moins je suis sûr de l'avoir bien compris car j'avais un petit doute dans ma tête lol

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.