Tutorial: Integrar OpenAI API en Python paso a paso
Desde tu primera llamada a GPT hasta un sistema completo con streaming, function calling y manejo de errores. Código production-ready.
Implementación paso a paso de Stripe Checkout para cobros únicos y suscripciones en Django. Incluye webhooks, portal del cliente y manejo de estados.
Guía paso a paso para integrar Stripe Checkout Session en Django. Cubre: crear sesión de pago, manejar webhooks, y activar suscripciones. El mismo patrón que usa esta comunidad.
pip install stripe
# settings.py
import os
STRIPE_PUBLIC_KEY = os.environ['STRIPE_PUBLIC_KEY']
STRIPE_SECRET_KEY = os.environ['STRIPE_SECRET_KEY']
STRIPE_WEBHOOK_SECRET = os.environ['STRIPE_WEBHOOK_SECRET']
STRIPE_PRICE_ID = os.environ['STRIPE_PRICE_ID'] # Price ID del plan
import stripe
from django.conf import settings
from django.shortcuts import redirect
from django.contrib.auth.decorators import login_required
stripe.api_key = settings.STRIPE_SECRET_KEY
@login_required
def create_checkout(request):
session = stripe.checkout.Session.create(
payment_method_types=['card'],
mode='subscription',
customer_email=request.user.email,
line_items=[{
'price': settings.STRIPE_PRICE_ID,
'quantity': 1,
}],
success_url=request.build_absolute_uri('/membership/success/'),
cancel_url=request.build_absolute_uri('/membership/'),
metadata={
'user_id': str(request.user.id),
},
)
return redirect(session.url)
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
import json
@csrf_exempt
@require_POST
def stripe_webhook(request):
payload = request.body
sig = request.META.get('HTTP_STRIPE_SIGNATURE', '')
try:
event = stripe.Webhook.construct_event(
payload, sig, settings.STRIPE_WEBHOOK_SECRET
)
except (ValueError, stripe.error.SignatureVerificationError):
return HttpResponse(status=400)
if event['type'] == 'checkout.session.completed':
session = event['data']['object']
user_id = session['metadata']['user_id']
activate_membership(user_id, session['subscription'])
elif event['type'] == 'customer.subscription.deleted':
subscription = event['data']['object']
deactivate_membership(subscription['id'])
return HttpResponse(status=200)
def activate_membership(user_id, subscription_id):
from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.get(id=user_id)
membership, _ = Membership.objects.get_or_create(user=user)
membership.is_active = True
membership.stripe_subscription_id = subscription_id
membership.save()
def deactivate_membership(subscription_id):
try:
membership = Membership.objects.get(
stripe_subscription_id=subscription_id
)
membership.is_active = False
membership.save()
except Membership.DoesNotExist:
pass
urlpatterns = [
path('membership/checkout/', create_checkout, name='checkout'),
path('membership/webhook/', stripe_webhook, name='stripe-webhook'),
path('membership/success/', success_view, name='checkout-success'),
]
<a href="{% url 'checkout' %}"
class="bg-emerald-500 text-white px-6 py-3 rounded-lg hover:bg-emerald-600">
Activar Membresía — $9.99/mes
</a>
# Instalar Stripe CLI
brew install stripe/stripe-cli/stripe
# Login
stripe login
# Forward webhooks a tu localhost
stripe listen --forward-to localhost:8000/membership/webhook/
# Tarjeta de prueba: 4242 4242 4242 4242, cualquier fecha futura, CVC 123
checkout.session.completed, customer.subscription.updated, customer.subscription.deletedSTRIPE_WEBHOOK_SECRET sea el del endpoint de producción (no el de CLI)Este recurso incluye un enlace externo. Regístrate para acceder.
Regístrate gratis para descargar archivos, guardar recursos en favoritos, ganar XP y acceder a cursos y el foro de la comunidad.
¿Ya tienes cuenta? Inicia sesión
Autor
Erik Taveras
Creado por
Erik Taveras
Desde tu primera llamada a GPT hasta un sistema completo con streaming, function calling y manejo de errores. Código production-ready.
Comparativa práctica entre REST y GraphQL con ejemplos en Python. Ventajas, desventajas y criterios de decisión para tu próximo proyecto.
Construye un chatbot que recuerda conversaciones anteriores usando Redis como almacén de memoria. Cada usuario tiene su propio historial persistente.