Inicio > Desarrollo Web > Tutoriales de Laravel > Cómo integrar Stripe en Laravel 11

Cómo integrar Stripe en Laravel 11

Diego Cortés
Diego Cortés
October 11, 2024
Cómo integrar Stripe en Laravel 11

Integrar un sistema de pagos en tu aplicación web es fundamental para facilitar transacciones y mejorar la experiencia del usuario. En este artículo, aprenderás cómo integrar Stripe, una de las plataformas de pago más populares, en una aplicación desarrollada con Laravel 11. Este tutorial es útil tanto para desarrolladores principiantes como para los más experimentados que busquen optimizar la gestión de pagos en sus proyectos.

¿Qué es Stripe?

Stripe es una plataforma de pago en línea que permite a las empresas aceptar pagos, enviar pagos y gestionar su negocio en línea. Proporciona APIs y herramientas que hacen que la integración sea sencilla y rápida. Con soporte para múltiples monedas, métodos de pago y seguridad avanzada, es una elección popular entre los desarrolladores.

Requisitos previos

Antes de comenzar con la integración de Stripe en Laravel 11, asegúrate de tener lo siguiente:

  • PHP 8.x: Laravel 11 requiere PHP 8.0 o superior.
  • Composer: Necesario para gestionar las dependencias de Laravel.
  • Una cuenta de Stripe: Regístrate en Stripe y obtén tus claves de API.

Creación de una nueva aplicación Laravel

Si aún no tienes una aplicación Laravel, sigue estos pasos:

  1. Instala Laravel:
  2. composer create-project --prefer-dist laravel/laravel nombre-del-proyecto
    cd nombre-del-proyecto
  3. Configura la base de datos: Edita el archivo .env y agrega los datos de tu base de datos.

Instalación de Stripe PHP SDK

Para integrar Stripe, primero debes instalar el SDK de Stripe. Ejecuta el siguiente comando en tu terminal dentro del directorio de tu proyecto:

composer require stripe/stripe-php

Configuración de las credenciales de Stripe

Una vez instalado el SDK, agrega tus claves de API en el archivo .env. Encuentra tus claves en el panel de control de Stripe.

STRIPE_KEY=tu_clave_publica
STRIPE_SECRET=tu_clave_secreta

Además, asegúrate de configurar la clave de Stripe en config/services.php:

'stripe' => [
    'key' => env('STRIPE_KEY'),
    'secret' => env('STRIPE_SECRET'),
],

Creación de un formulario de pago

Ahora que tienes todo configurado, crea un formulario en tu vista. Dirígete a resources/views y crea un archivo llamado payment.blade.php:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Pago con Stripe</title>
    <script src="https://js.stripe.com/v3/"></script>
</head>
<body>
    <form action="{{ route('charge') }}" method="POST" id="payment-form">
        @csrf
        <div>
            <label for="card-element">Tarjeta de crédito o débito</label>
            <div id="card-element"></div>
            <div id="card-errors" role="alert"></div>
        </div>
        <button type="submit">Pagar</button>
    </form>

    <script>
        var stripe = Stripe('{{ config('services.stripe.key') }}');
        var elements = stripe.elements();
        var cardElement = elements.create('card');
        cardElement.mount('#card-element');

        var form = document.getElementById('payment-form');
        form.addEventListener('submit', function(event) {
            event.preventDefault();

            stripe.createToken(cardElement).then(function(result) {
                if (result.error) {
                    // Muestra el error en el formulario
                    document.getElementById('card-errors').textContent = result.error.message;
                } else {
                    // Inserta el token en el formulario
                    var hiddenInput = document.createElement('input');
                    hiddenInput.setAttribute('type', 'hidden');
                    hiddenInput.setAttribute('name', 'stripeToken');
                    hiddenInput.setAttribute('value', result.token.id);
                    form.appendChild(hiddenInput);

                    // Envia el formulario
                    form.submit();
                }
            });
        });
    </script>
</body>
</html>

Validación y procesamiento de pagos

Crea una ruta y un controlador para manejar la lógica del pago. Primero, añade la ruta en routes/web.php:

use App\Http\Controllers\PaymentController;

Route::get('/payment', function () {
    return view('payment');
});

Route::post('/charge', [PaymentController::class, 'charge'])->name('charge');

Luego, genera el controlador con el siguiente comando:

php artisan make:controller PaymentController

Abre app/Http/Controllers/PaymentController.php y agrega el siguiente código:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Stripe\Stripe;
use Stripe\Charge;

class PaymentController extends Controller
{
    public function charge(Request $request)
    {
        Stripe::setApiKey(config('services.stripe.secret'));

        $charge = Charge::create([
            'amount' => 1000, // Monto en centavos: $10.00
            'currency' => 'usd',
            'description' => 'Pago de prueba',
            'source' => $request->stripeToken,
        ]);

        // Maneja la respuesta exitosa
        return back()->with('success', 'Pago realizado con éxito!');
    }
}

Manejo de respuestas y errores

Para manejar errores y mostrar mensajes de éxito, puedes agregar un bloque para mostrar mensajes en tu vista de pago. En payment.blade.php, añade lo siguiente justo antes del formulario:

@if(session('success'))
    <div>{{ session('success') }}</div>
@endif

@if(session('error'))
    <div>{{ session('error') }}</div>
@endif

Esto te permitirá mostrar mensajes al usuario según si el pago fue exitoso o no.

Conclusión

Integrar Stripe en Laravel 11 es un proceso relativamente sencillo que puede expandir significativamente las capacidades de tu aplicación. Al seguir este tutorial, habrás implementado un sistema de pago seguro y confiable, permitiendo a tus usuarios realizar transacciones con facilidad.

Recuerda siempre probar tu integración en el entorno de pruebas de Stripe antes de ir a producción. Adicionalmente, considera implementar medidas de seguridad más avanzadas dependiendo de las necesidades de tu aplicación. Si bien este artículo cubrió lo básico, hay muchas más características de Stripe que puedes explorar y aprovechar.

Para más información, revisa la documentación oficial de Stripe y mantente al día con las actualizaciones de Laravel. ¡Feliz codificación!

Diego Cortés
Diego Cortés
Full Stack Developer, SEO Specialist with Expertise in Laravel & Vue.js and 3D Generalist

Categorías

Page loaded in 26.12 ms