Spaces:
Sleeping
Sleeping
| import stripe | |
| import bridges | |
| stripe.api_key = bridges.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': 'fr', #'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 |