Mostrando entradas con la etiqueta Pasarelas de Pago. Mostrar todas las entradas
Mostrando entradas con la etiqueta Pasarelas de Pago. Mostrar todas las entradas

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