Método pago Stripe

Instalar el siguiente paquete:
composer require stripe/stripe-php

En https://dashboard.stripe.com/ crear la KEY y la SECRET.

En config\services.php:
'stripe' => [
      'key' => env('STRIPE_KEY'),
      'secret' => env('STRIPE_SECRET'),
],

En .env:
STRIPE_KEY=pk_test_qXXXX2mXampQn9q
STRIPE_SECRET=sk_test_GG4XXXXjSgqMCSASllt

En la view donde quieras realizar el pago poner algo así como:
<div>
            <form action="/pagar_por_stripe" method="post" id="payment-form">
                @csrf
                <input type="hidden" name="cantidadPagar" value="{{ $order->total * 100 }}">
                <div class="form-row">
                  <label for="card-element">
                    Credit or debit card
                  </label>
                  <div id="card-element">
                    <!-- A Stripe Element will be inserted here. -->
                  </div>

                  <!-- Used to display Element errors. -->
                  <div id="card-errors" role="alert"></div>
                </div>

                <button>Submit Payment</button>
              </form>
        </div>

En esa misma view en @push("scripts") y @endpush:
<script src="https://js.stripe.com/v3/"></script>
        <script>
            var stripe = Stripe("{{ config('services.stripe.key') }}");
            var elements = stripe.elements();

            // crear la tarjeta
            var style = {
                base: {
                    // Add your base input styles here. For example:
                    fontSize: '16px',
                    color: '#32325d',
                },
                };
            var card = elements.create('card', {style: style});
            card.mount('#card-element');

            function stripeTokenHandler(token) {
                // Insert the token ID into the form so it gets submitted to the server
                var form = document.getElementById('payment-form');
                var hiddenInput = document.createElement('input');
                hiddenInput.setAttribute('type', 'hidden');
                hiddenInput.setAttribute('name', 'stripeToken');
                hiddenInput.setAttribute('value', token.id);
                form.appendChild(hiddenInput);

                // Submit the form
                form.submit();
            }

            // Create a token or display an error when the form is submitted.
            var form = document.getElementById('payment-form');
                form.addEventListener('submit', function(event) {
                    event.preventDefault();

                    stripe.createToken(card).then(function(result) {
                        if (result.error) {
                        // Inform the customer that there was an error.
                        var errorElement = document.getElementById('card-errors');
                        errorElement.textContent = result.error.message;
                        } else {
                        // Send the token to your server.
                        console.log(result.token.id);
                        stripeTokenHandler(result.token);
                        }
                    });
                });
        </script>



Crear un controller para gestionar ese pago:
php artisan make:controller StripeController

Crear la ruta en routes\web.php:
use App\Http\Controllers\StripeController;
...
Route::post('pagar_por_stripe', [StripeController::class, 'pagar'])->name('pagar_por_stripe');

En app\Http\Controllers\StripeController.php:
use Stripe\Stripe;
use Stripe\Charge;
...
public function pagar(Request $request) {
        // dd($request);
        Stripe::setApiKey(config('services.stripe.secret'));
        $token = $request->stripeToken;
        // dd($token);
        $charge = Charge::create([
            'amount' => $request->cantidadPagar, // por ejemplo 1599
            'currency' => 'usd',
            'description' => 'cargo de prueba',
            'source' => $token,
        ]);

        dd($charge);
    }

Más información en: https://stripe.com/docs/payments/accept-a-payment-charges#web
Para hacer pruebas con tarjetas falsas: https://stripe.com/docs/testing
Para ir viendo en el dashboard los pagos que se van realizando: https://dashboard.stripe.com/test/payments

No hay comentarios:

Publicar un comentario