arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Integrar Stripe con Django

Eduardo Ismael Garcia

Full Stack Developer at Código Facilito.

av_timer 3 Min. de lectura

remove_red_eye 34578 visitas

calendar_today 25 Octubre 2019

Stripe es sin duda una de las pasarelas de pago más populares en la actualidad, y no es de extrañarse, con stripe es posible realizar pagos electrónicos de forma fácil y segura, además de poseer una, de las que considero yo, de las mejores documentaciones en el mercado. Esto sin duda hace a Stripe una excelente opción si lo que deseamos es implementar cobros en nuestras aplicaciones.

Es por ello que en esta ocasión aprenderemos a integrar Stripe a un proyecto con Django. Es bastante sencillo, veamos.

Stripe

Lo primero que haremos será obtener la llave pública y la llave privada de nuestra cuenta Stripe. A partir de estas llaves seremos capaces de comunicar nuestro proyecto con el API de stripe.

Para obtener las llaves es necesario autenticarse en Stripe, dirigirnos a Desarrolladores y Claves de API.

Es una muy idea almacenar este par de llaves dentro de variables de entorno.

Para trabajar con variables de entorno en Python yo recomiendo utilizar la biblioteca decouple; es bastante sencilla de utilizar en comparación con os.

pip install python-decouple

Django

Listo, ya tenemos el par de llaves, ahora vamos a instalar la biblioteca oficial de stripe.

pip install stripe

El siguiente paso será definir una nueva constante dentrol del archivo settings.py. Esta constante almacenará nuestra llave privada.

from decouple import config

STRIPE_SECRET_KEY = config('STRIPE_SECRET_KEY')

En mi caso la constante tiene por nombre STRIPE_SECRET_KEY, sin embargo tú puedes colocar el nombre que desees.

import stripe
from django.conf import settings

stripe.api_key = settings.STRIPE_SECRET_KEY

Prácticamente estas serían todas las configuraciones a nuestro proyecto ¿Bastante sencillo no?

Implementación

Como mencione anteriormente Stripe posee una de las mejoresdocumentaciones en el mercado, es por ello que te invito, encarecidamente, que le eches un vistazo, sin duda obtendrás las respuestas que estás buscando.

En este caso implementaremos Stripe mediante un módulo. Mi módulo tendrá por nombre StripeAPI. Dentro del módulo vamos a definir, para este tutorial, 4 nuevos archivos.

  • init.py
  • customers.py
  • cards.py
  • charges.py

Dentro del archivo init colocamos lo siguiente.

import stripe
from django.conf import settings

stripe.api_key = settings.STRIPE_SECRET_KEY

De esta forma seremos capaces de comunicarnos con el API de Stripe.

Para realizar cualquier tipo de cargo será necesario crear y asociar un customer a cada uno de nuestros usuarios.

Dentro del archivo customers.py colocamos lo siguiente.

from . import stripe

def create_customer(user):
    customer = stripe.Customer.create(
        description=user.description #Una simple descripción del usuario
    )
    return customer

Una vez obtengamos respuesta por parte de Stripe almacenaremos el ld del customer en nuestro objeto user.

from users.models import User

user = User.objects.get(pk=1)

customer = create_customer(user)

user.customer_id = customer.id
user.save()

El siguiente, paso antes de realizar un cobro, es asociar un método de pago a nuestro objeto customer, para ello nos apoyaremos del siguiente formulario.

Nuestra vista pudiera quedar de la siguiente manera.

from stripeAPI.card import create_card

@login_required(login_url='login')
def create(request):
    if request.method == 'POST':
        if request.POST.get('stripeToken'):

            billing_profile = BillingProfile(user=request.user)

            card = create_card(request.user, request.POST['stripeToken'])

            billing_profile.card_id = card.id
            billing_profile.save()

Dentro del archivo cards.py colocamos lo siguiente.


from . import stripe

def create_card(user, token):
        return stripe.Customer.create_source(user.customer_id, source=token)

Perfecto, ya tenemos nuestro customer y este ya posee un método de pago; para finalizar el tutorial vamos a realizar un cargo.

Nuestro archivo charges.py quedaría de la siguiente manera.

from . import stripe

def create_charge(order, user, card):
    return stripe.Charge.create(
        amount=int(order.total), #En centavos
        currency='USD',
        description=order.description,
        customer=user.customer_id,
        source=card.card_id, #Método de pago
        metadata={
            'order_id': order.id
        }
    )

En este caso simuló que el cargo viene de una orden de compra, es por ello que mi función create_charge recibe como parámetro una order.

Y listo, de esta forma es como generar un cargo a uno de nuestros usuarios. Es necesario crear y asociar un customer a nuestro usuario, además que este debe poseer por lo menos un método de pago.

Bootcamp FullStack con JavaScript

Más información

Inscripciones Abiertas.