Moibe's picture
Fix 3
d1da420
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"}