stripe-kraken / funciones.py
Moibe's picture
Global Bridge
4579ff3
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