File size: 3,296 Bytes
101ef6c
 
 
 
 
38b9b76
101ef6c
 
 
38b9b76
b43e2e7
38b9b76
101ef6c
 
 
 
 
 
 
 
38b9b76
101ef6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import stripe
import globales
import herramientas
import ga4Analiticas
from fastapi import Request, Header
import time

async def procesa_evento(request: Request, stripe_signature: str = Header(None)):

    print("Estoy en procesa evento....")
    

    webhook_secret = globales.webhook
    data = await request.body()    
    
    try:         
        event = stripe.Webhook.construct_event(
            payload=data,
            sig_header=stripe_signature,
            secret=webhook_secret
        ) 

    except Exception as e:     
        print("Excepción es: ", e)         

    try:
        event_data = event['data']['object']     
    except Exception as e:     
        print("Excepción-183 es: ", e)
    
    event_type = event['type']
    print("Voy a imprimir el event type:")
    print(event_type)
    print("Sucedido a las: ", herramientas.imprimeTime())
    gaCliente = event_data['metadata'].get('gaCliente', None)

    if event_type == 'checkout.session.completed': 
        print("Checkout Session completado.")
        print("Status:")
        print(event_data['status'])   
        print("Payment Method Options:")     
        print(event_data['payment_method_options']) 
        print("Cantidad de elementos:")
        print(len(event_data['payment_method_options']))        
        
        #Importante: Todas las acciones relacionadas a la compra con tarjeta deben ir en el IF.
        #De lo contrario se marcará también en OXXO, antes de hacerce el pago.
        if len(event_data['payment_method_options']) > 0: #Si es mayor que cero checa si existe card.
            if len(event_data['payment_method_options']["card"]) > 1: #Si el contenido de card es mayor de uno, si existe y puedes finalmente procesar el pago.
                cus_id = event_data['customer']
                print("Customer directo:", cus_id)
                imagenes = event_data['metadata']['imagenes']
                print("Imágenes:")
                print(imagenes)  
                firebase_user = event_data['metadata']['firebase_user']
                herramientas.registrar_evento(cus_id, firebase_user, int(imagenes))  
                #Analytics se hace al final después de registrar la venta.
                print("gacliente:", gaCliente)
                print("Sending to GA4...")
                ga4Analiticas.send_ga4_purchase_event(event_data)           

    if event_type == 'checkout.session.async_payment_succeeded': 
        print("Pago asíncrono completado.")
        print("Checkout Session completado.")
        print("Status:")
        print(event_data['status'])  
        print("Payment Method Options:")     
        print(event_data['payment_method_options']) 
        print("Cantidad de elementos:")
        print(len(event_data['payment_method_options']))
        cus_id = event_data['customer']
        print("Customer directo:", cus_id)
        imagenes = event_data['metadata']['imagenes']
        print("Imágenes:")
        print(imagenes)  
        herramientas.registrar_evento(cus_id, int(imagenes))
        print("gacliente:", gaCliente)
        print("Sending to GA4...")
        ga4Analiticas.send_ga4_purchase_event(event_data)
        
    else:
        print(f'unhandled event: {event_type}')      
    
    return {"status": "success"}