leifermendez/laravel-stripe

There is no license information available for the latest version (1.1.0) of this package.

Paquete para laravel el cual ya incorpora el sistema SCA regulación Europea 14 septiembre

1.1.0 2019-10-24 18:05 UTC

This package is auto-updated.

Last update: 2024-06-29 04:34:19 UTC


README

Laravel Stripe SCA

A continuación mostraremos como realizar un cargo en Stripe con el protocolo SCA. El siguiente paquete nos permite registrar usuarios, guardar tarjetas para pagos posteriores, crear intenciones de pago.

NOTA: Antes continuar recuerda solicitar tus credenciales de acceso en Stripe

Instalar

composer require leifermendez/laravel-stripe

Laravel 5.* Integración

Add the service provider to your config/app.php file:

    'providers'     => array(

        //...
        leifermendez\stripe\StripeProvider::class,

    ),

Add the facade to your config/app.php file:

    'aliases'       => array(

        //...
        'StripeSCA'  => leifermendez\stripe\StripeLaravelFacade::class,

    ),

Uso

Recuerda colocar tus credenciales en tu archivo .env , Mode: "sandbox" or "live"

# STRIPE

STRIPE_PK=pk_test_xxxxxxxxxxxx
STRIPE_SK=sk_test_xxxxxxxxxxx
STRIPE_MODE=sandbox

(1) Obtener Token de Tarjeta

En algunos casos es necesario obtener el token de tarjeta vía API (no recomendado), se recomienda usar StripeJS

StripeJS Demo Live

//Test card: https://stripe.com/docs/testing#cards

$card_data = array(
    'card' => [
        'number' => 4000002500003155,
        'exp_month' => 12,
        'exp_year' => 2020,
        'cvc' => 123
    ]
);

$card = StripeLaravelFacade::tokenCard($card_data);
$card = json_decode($card, true);

dd($card);

(2) Guardar Cliente

Si queremos guardar nuestros clientes para consultar posteriormente.

// https://stripe.com/docs/api/payment_intents/create

$data = array(
    'email' => 'leifer33@gmail.com',
    'source' => 'tok_1FOO42HBaMrHjOH4Cu0dnogU' // <-- Token Card Paso (1)
);

$user = StripeLaravelFacade::saveCustomer($data);
$user = json_decode($user, true);

dd($response);

Cliente

(3) Crear Pago

NOTA: Con la implementación del SCA, los pagos deben realizarse bajo una "Intención de Pago". Lo que técnicamente realizamos es una petición para realizar un pago y Stripe se encarga de verificar si la tarjeta requiere o no requiere una verificación en dos pasos.

Comportamiento: Pueden pasar dos cosas:

  • (1) No requiere doble verificación y el pago se realiza correctamente.
  • (2) Requiere doble verificación :
    • El "status" de la respuesta determinara la acción que se debe tomar Ver más status. El status más frecuente en este caso es requires_action esta acción solo se puede realizar a través del StripeJS
// https://stripe.com/docs/api/payment_intents/create

$amount = 134;
$charge = array(
    'description' => 'Mi primer cobro',
    'amount' => floatval($amount * 100),
    'currency' => 'EUR',
    'payment_method_types' => ['card'],
    'customer' => cus_G0amE3Dmn4p1f0, // <--- ID Customer Paso (2)
    'setup_future_usage' => 'off_session' // <--- Off Session
);

$response = StripeLaravelFacade::charge_sca($charge);

dd($response);

Pago

(3.1) Crear Pago No Capturado

NOTA: (No capturados), son aquellos pagos que necesitamos retener o bloquear, para posteriormente usar o no usar. Ejemplo: Si tienes un hotel y deseas cobrar 100EUR de garantía o fianza, puedes usar esta opción ya que el sistema bloquea este monto en la tarjeta del cliente por 7 días. El dinero solo estará disponible para capturar (cobrar) en los siguiente 7 días de lo contrario si no realizas ninguna captura Stripe libera el monto al cliente.

$amount = 134;

$charge = array(
    'description' => 'Cobro de fianza' ,
    'amount' => floatval($amount * 100),
    'currency' => 'EUR',
    'payment_method_types' => ['card'],
    'off_session' => 'true',
    'confirm' => 'true',
    'capture_method' => 'manual', // <--- Indicamos que es un pago No Capturado
    'source' => 'card_1FX8TaHBaMrHjOH4MeiQmvPC', // <---  ID Source Customer Paso (2)
    'customer' => 'cus_G0amE3Dmn4p1f0'  // <--- ID Customer Paso (2)

);

$response = StripeLaravelFacade::charge_sca($charge);

dd($response);

No_capturado