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)): 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()) if event_type == 'checkout.session.completed': print("Checkout Session completado.") # Imprimir todos los metadatos metadata = event_data['metadata']._to_dict_recursive() print("Metadatos completos:") print(metadata) gaCliente = metadata.get('gaCliente', None) print("Gaclient es: ", gaCliente) # Obtener de qué sitio viene el evento sitio = metadata.get('sitio', None) print("Sitio es: ", sitio) print("Status:") print(event_data['status']) payment_options = event_data['payment_method_options']._to_dict_recursive() print("Payment Method Options:") print(payment_options) print("Cantidad de elementos:") print(len(payment_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(payment_options) > 0: #Si es mayor que cero checa si existe card. if len(payment_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 = metadata.get('imagenes', None) print("Imágenes:", imagenes) firebase_user = metadata.get('firebase_user', None) print("Firebase user:", firebase_user) if firebase_user: herramientas.registrar_evento(cus_id, firebase_user, int(imagenes), sitio) else: print(f"No hay firebase_user, sitio: {sitio}. No se registra evento en firestore.") #Analytics se hace al final después de registrar la venta. print("gacliente:", gaCliente) #Si el cliente es None, éste no fue enviado y no ejecutes esto. if(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.") # Imprimir todos los metadatos metadata = event_data['metadata']._to_dict_recursive() print("Metadatos completos:") print(metadata) gaCliente = metadata.get('gaCliente', None) print("Gaclient es: ", gaCliente) # Obtener de qué sitio viene el evento sitio = metadata.get('sitio', None) print("Sitio es: ", sitio) #print("Status:") print(event_data['status']) payment_options = event_data['payment_method_options']._to_dict_recursive() print("Payment Method Options:") print(payment_options) print("Cantidad de elementos:") print(len(payment_options)) cus_id = event_data['customer'] print("Customer directo:", cus_id) imagenes = metadata.get('imagenes', None) print("Imágenes:") print(imagenes) firebase_user = metadata.get('firebase_user', None) print("Firebase user:", firebase_user) if firebase_user: herramientas.registrar_evento(cus_id, firebase_user, int(imagenes), sitio) else: print(f"No hay firebase_user, sitio: {sitio}. No se registra evento en firestore.") print("gacliente:", gaCliente) print("Sending to GA4...") ga4Analiticas.send_ga4_purchase_event(event_data) else: print(f'unhandled event: {event_type}') return {"status": "success"}