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