Spaces:
Running
Running
| 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"} |