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