import stripe import globales stripe.api_key = globales.llave def create_checkout_session(price_id, customer_email=None, customer_id=None): """ Crea una nueva Checkout Session para un pago único. Args: price_id (str): El ID del precio en Stripe para el artículo que se va a comprar. customer_email (str, opcional): Email para pre-rellenar o asociar con un cliente existente. customer_id (str, opcional): ID de un cliente existente en Stripe para asociar la sesión. Returns: str: La URL de la Checkout Session, o None si hay un error. """ try: session_params = { 'line_items': [{ 'price': price_id, 'quantity': 1, }], 'mode': 'payment', #payment Para pagos únicos (one-time payment) o #subscription 'success_url': 'https://app.splashmix.ink/', #'https://tudominio.com/gracias?session_id={CHECKOUT_SESSION_ID}' 'cancel_url': 'https://app.splashmix.ink/', 'locale': 'es', #'es' # Establece el idioma del checkout a español 'client_reference_id': 'HERC' } # Opciones para el cliente if customer_id: session_params['customer'] = customer_id elif customer_email: session_params['customer_email'] = customer_email else: # Si no se provee ni customer_id ni customer_email, Stripe puede crear uno si es necesario # O podrías pedir el email en el formulario de Checkout. pass # Opcional: Agregar información de envío si aplica (para productos físicos) # session_params['shipping_address_collection'] = {'allowed_countries': ['US', 'CA', 'MX']} # Opcional: Permitir códigos promocionales # session_params['allow_promotion_codes'] = True # Opcional: Agregar metadata a la sesión (no al pago final directamente, pero útil para webhooks) # session_params['metadata'] = {'order_id': 'ORD12345', 'user_id': 'user_abc'} session = stripe.checkout.Session.create(**session_params) print(f"Checkout Session creada exitosamente. ID: {session.id}") print(f"URL de redirección: {session.url}") return session.url except stripe.error.StripeError as e: print(f"Error de Stripe al crear la Checkout Session: {e}") return None except Exception as e: print(f"Ocurrió un error inesperado al crear la Checkout Session: {e}") return None def create_stripe_customer(email, firebase_user=None, site=None): """ Busca un cliente existente en Stripe por su email. Si el cliente no existe, lo crea con los datos proporcionados. Args: email (str): La dirección de correo electrónico del cliente. (Se usará para buscar si el cliente ya existe). firebase_user (str, opcional): El ID de usuario de Firebase. Se agregará a 'metadata'. site (str, opcional): El nombre del sitio de origen. Se agregará a 'metadata'. Returns: tuple: (stripe.Customer, str) donde el string indica "found" o "created". None: Si ocurre un error. """ try: # --- 1. Intentar buscar un cliente existente por email --- existing_customers = stripe.Customer.list(email=email, limit=1) if existing_customers.data: customer = existing_customers.data[0] print(f"Cliente existente encontrado por email. ID: {customer.id}") return customer, "found" # Retorna el cliente y el estado "found" # --- 2. Si el cliente no existe, crearlo --- print(f"Cliente con email '{email}' no encontrado. Creando nuevo cliente...") customer_params = { 'email': email, } # Construir el diccionario de metadata con firebase_user y site customer_metadata = {} if firebase_user: customer_metadata['firebase_user'] = firebase_user if site: customer_metadata['site'] = site if customer_metadata: # Solo agregar metadata si no está vacía customer_params['metadata'] = customer_metadata customer = stripe.Customer.create(**customer_params) print(f"Nuevo cliente creado exitosamente. ID: {customer.id}") return customer, "created" # Retorna el cliente y el estado "created" except stripe.error.StripeError as e: print(f"Error de Stripe al buscar o crear el cliente: {e}") return None except Exception as e: print(f"Ocurrió un error inesperado: {e}") return None