ccc

Laravel: Billing (pago y subscripción por Stripe)

Lo primero tienes que añadir en la BD a la tabla users los campos:
$table->string('stripe_id')->nullable();
$table->string('card_brand')->nullable();
$table->string('card_last_four')->nullable();
$table->timestamp('trial_ends_at')->nullable();

Y crear la tabla subscriptions con los campos:
$table->increments('id');
$table->integer('user_id');
$table->string('name');
$table->string('stripe_id');
$table->string('stripe_plan');
$table->integer('quantity');
$table->timestamp('trial_ends_at')->nullable();
$table->timestamp('ends_at')->nullable();
$table->timestamps();

Registrarte en stripe.com
Obtener las API Keys (Una vez obtenidas están en https://dashboard.stripe.com/account/apikeys)

Por ejemplo:
test secret key: sk_test_cOzxt2xxxxv3aBSWjlipAT3a
test publishable key: pk_test_BGxxxxk8V63jihNc1iolP9Fd
Si no hubiese ningún banco que trabaje con euros añadirlo en:
https://dashboard.stripe.com/account/transfers
Registar un nuevo plan en https://dashboard.stripe.com/test/plans, por ejemplo:
ID: uno
Name: uno
Price:  €9.99 EUR/week
Trial period: No trial

En .env crear una nueva variable con el secret key:
STRIPE_SECRET=sk_test_cOzxt2xxxxv3aBSWjlipAT3a

En config/services.php:
'stripe' => [
        'model'  => App\User::class,
        'secret' => env('STRIPE_SECRET'),
    ],

En tu aplicación Laravel debes tener previamente instalado el Auth con:
php artisan make:auth

Instalamos el cashier:
composer require laravel/cashier:~7.0

Lo añadimos al provider de config.app:
Laravel\Cashier\CashierServiceProvider::class,

En el modelo de app/User.php:
use Laravel\Cashier\Billable;
class User extends Authenticatable
{
...
    use Billable;
...
}

En routes/web.php:
Route::get('/home', 'HomeController@index');
Route::post('/home', 'HomeController@subscription');

En HomeController.php:
<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;

class HomeController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }


    public function index()
    {
        return view('home');
    }

    public function subscription(Request $request){
        $token = $request->stripeToken;
        \Auth::user()->newSubscription('main', 'uno')->create($token);
        return ('you are subscribed now');
    }
}

En la vista home.blade.php:
<form action="" method="POST">
   <input type="hidden" name="_token" value="{{ csrf_token() }}">
   <script
      src="https://checkout.stripe.com/checkout.js" class="stripe-button"
      data-key="pk_test_BGxxxxk8V63jihNc1iolP9Fd"
      data-amount="999"
      data-name="Pago semanal"
      data-description="Pagar 9.99 euros"
      data-image="https://stripe.com/img/documentation/checkout/marketplace.png">
    </script>
</form>

A la hora de ejecutarlo utilizar como tarjeta de crédito de prueba:
4242 4242 4242 4242

No hay comentarios:

Publicar un comentario