Spaces:
Running
Running
File size: 4,643 Bytes
11cdb7c 4579ff3 d90d6a6 4579ff3 2695e7b 5cfc6de 64e0349 2695e7b ddb4143 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 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 |