Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/mouredev/logica-aplicada/llms.txt

Use this file to discover all available pages before exploring further.

Este proyecto muestra cómo procesar pagos por internet con tarjeta de crédito usando Stripe, una de las plataformas de pagos más extendidas del mundo. La implementación cubre el flujo completo: crear un cliente en Stripe, asociarle un método de pago, recuperar un producto con su precio y ejecutar el cobro. Todo ello en más de 135 divisas, con manejo de errores incluido.
Dificultad: Fácil · Publicado: 10/02/2025

Objetivos de aprendizaje

Al completar este proyecto aprenderás a:
  • Recoger y registrar información del usuario como cliente de Stripe.
  • Realizar un cargo asociado a un importe y una divisa.
  • Gestionar productos y precios a través de la API de Stripe.
  • Manejar errores específicos de Stripe (CardError, StripeError).

Configuración

1

Instalar dependencias

Desde la carpeta del proyecto, instala las dependencias con pip:
pip install -r requirements.txt
El fichero requirements.txt contiene:
stripe>=11.5.0
python-dotenv>=1.0.1
2

Configurar las variables de entorno

Crea un fichero .env en la raíz del proyecto y añade tu clave secreta de Stripe:
STRIPE_SECRET_KEY=sk_test_...
Puedes obtener tu clave desde el Dashboard de Stripe. Usa siempre claves de test (sk_test_...) mientras desarrollas.
3

Ejecutar el script

Con las dependencias instaladas y el .env configurado, lanza el script:
python stripe_payments_gateway.py

Código del proyecto

A continuación se muestra el código completo del fichero stripe_payments_gateway.py. Cada función encapsula una operación concreta de la API de Stripe.
import os
import dotenv
import stripe
import stripe.error

# Configuración del entorno

dotenv.load_dotenv()
STRIPE_SECRET_KEY = os.getenv("STRIPE_SECRET_KEY")

stripe.api_key = STRIPE_SECRET_KEY

# Crear método de pago


def create_payment_method() -> str:

    try:
        payment_method = stripe.PaymentMethod.create(
            type="card",
            card={"token": "tok_visa"}
        )

        print(f"Método de pago creado con ID: {payment_method.id}")

        return payment_method.id
    except stripe.error.StripeError as e:
        print(f"Error en Stripe: {e.user_message}")

# Crear un pago


def create_payment(client_id: str, payment_method_id: str, product_id: str, amount: int, currency: str):

    try:

        payment = stripe.PaymentIntent.create(
            amount=amount,
            currency=currency,
            customer=client_id,
            payment_method=payment_method_id,
            payment_method_types=["card"],
            confirm=True,
            metadata={
                "product_id": product_id
            }
        )

        print(f"Pago con ID {payment.id} realizado correctamente.")

    except stripe.error.CardError as e:
        print(f"Error en la tarjeta: {e.user_message}")
    except stripe.error.StripeError as e:
        print(f"Error en Stripe: {e.user_message}")

# Crear usuario


def create_user(name, email):

    try:
        client = stripe.Customer.create(
            name=name,
            email=email
        )

        print(f"Client {name} creado correctamente con ID {client.id}")

        return client.id
    except stripe.error.StripeError as e:
        print(f"Error en Stripe: {e.user_message}")

# Asociar método de pago a usuario


def add_payment_method_to_user(client_id, payment_method_id):

    try:
        stripe.PaymentMethod.attach(
            payment_method_id,
            customer=client_id
        )

        print("Método de pago asociado al usuario.")

    except stripe.error.StripeError as e:
        print(f"Error en Stripe: {e.user_message}")

# Obtener productos


def get_product():

    products = stripe.Product.list(limit=1)

    return products["data"][0]["id"]


def get_product_price(product_id):

    price = stripe.Price.list(product=product_id, limit=1)

    price_id = price["data"][0]["id"]
    amount = price["data"][0]["unit_amount"]
    currency = price["data"][0]["currency"]

    return price_id, amount, currency

# Prueba


client_id = create_user("Brais Moure", "mouredev@gmail.com")

payment_method_id = create_payment_method()

add_payment_method_to_user(client_id, payment_method_id)

product_id = get_product()
price_id, amount, currency = get_product_price(product_id)

create_payment(client_id, payment_method_id, product_id, amount, currency)

Descripción de las funciones

FunciónDescripciónRetorna
create_user(name, email)Crea un cliente (Customer) en Stripe con nombre y correo.client.id
create_payment_method()Crea un PaymentMethod de tipo tarjeta usando el token de test tok_visa.payment_method.id
add_payment_method_to_user(client_id, payment_method_id)Vincula el método de pago al cliente mediante PaymentMethod.attach.
get_product()Recupera el primer producto del catálogo de Stripe.product_id
get_product_price(product_id)Obtiene el precio asociado al producto: identificador, importe y divisa.(price_id, amount, currency)
create_payment(client_id, payment_method_id, product_id, amount, currency)Crea y confirma un PaymentIntent con todos los datos del cobro.

Pruebas en modo test

Stripe ofrece un entorno de pruebas completamente separado del de producción. Mientras uses claves sk_test_..., ningún cobro real se ejecutará.El token tok_visa utilizado en create_payment_method() simula una tarjeta Visa válida en modo test. Stripe pone a disposición muchos otros tokens para probar distintos escenarios (tarjeta rechazada, fondos insuficientes, autenticación 3D Secure, etc.).Consulta todos los tokens y números de tarjeta disponibles en la documentación de testing de Stripe.
  • Clave de test: empieza por sk_test_ — úsala siempre durante el desarrollo.
  • Clave de producción: empieza por sk_live_ — actívala solo cuando tu integración esté lista para cobros reales.

Recursos

Web de Stripe

Página principal de Stripe en español: planes, productos y registro.

Documentación de Stripe

Guía oficial para configurar tu entorno de desarrollo con Stripe.

Testing en Stripe

Referencia completa de tarjetas y tokens de prueba disponibles.

Vídeo tutorial

Explicación paso a paso del desarrollo del proyecto en vídeo.

Contribuciones de la comunidad

Cualquier persona puede aportar su propia implementación de este proyecto en el lenguaje de programación que prefiera. La lógica detrás de Stripe es la misma independientemente del lenguaje: la documentación oficial incluye ejemplos en Python, JavaScript, Ruby, PHP, Java, Go y más. Para enviar tu solución, consulta las instrucciones para contribuir y sigue el proceso de fork y pull request descrito allí.
Las contribuciones de la comunidad se añaden a este repositorio como enlaces a los repositorios individuales de cada participante, agrupados por lenguaje de programación.

Build docs developers (and LLMs) love