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