Spaces:
Running
Running
File size: 4,641 Bytes
11cdb7c 2695e7b d90d6a6 2695e7b 5cfc6de 64e0349 2695e7b 64e0349 5cfc6de 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 64e0349 03e7a68 5cfc6de |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
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 |