Llegiu abans: https://laravel.com/docs/master/billing per veure si hi ha alguna novetat
Utilizant Composer:
"laravel/cashier": "~6.0"
Per tant afegir a composer.json cashier:
$ composer require "laravel/cashier:~6.0"
Ara cal registrar el Service Provider:
Laravel\Cashier\CashierServiceProvider
al fitxer:
config/app.php
El paquet composer de cashier ens proporciona unes migracions per tal d'afegir les columnes necessàries a la base de dades. Podeu utilitzar la comanda:
$ php artisan cashier:table
Per exemple per afegir la columna necessària a la taula users:
$ php artisan cashier:table users
Ara ja teniu la migració creada i només cal executar:
$ php artisan migrate
Per aplicar els canvis a la base de dades.
La clau la podeu definir al fitxer config/services.php:
'stripe' => [ 'model' => 'User', 'secret' => env('STRIPE_API_SECRET'), ]
Com podeu veure la millor opció és utilitzar una variable d'entorn Laravel amb el mètode env. Heu de definir les variables d'entorn al fitxer .env:
$ editor .env STRIPE_API_SECRET=YOU_STRIPE_SECRET_KEY
La clau l'obteniu de dins de cashier a l'apartat:
Your account > Account settings > API keys
Com podeu veure hi ha 4 API_KEYS segons si estem utilitzant l'entorn de proves (TEST) o d'explotació (live) i també depenent hi ha una part de la API_KEY que és publicable (s'ha de posar als formularis HTML publics del vostre site i la part secreta)
El procediment és utilitzar les API keys de test durant el desenvolupament de l'aplicació i canviar-les per les LIVE quan poseu l'aplicació en explotació.
Cal adaptar la classe User i ho farem utilitzant el Trait Billable
use Laravel\Cashier\Billable; class User extends Authenticatable { use Billable; }
I heu d'establir la clau d'Stripe al fitxer services.php:
Finally, set your Stripe key in your services.php configuration file: 'stripe' => [ 'model' => App\User::class, 'secret' => env('STRIPE_API_SECRET'), ],
https://laravel.com/docs/master/billing#subscriptions
El codi per afegir una subscripció és senzill:
$user = User::find(1); $user->newSubscription('main', 'monthly')->create($creditCardToken);
On el $creditCardToken vindrà donat per la petició (HTTP Request) que sovint vindrà dels resultat de processar una petició Stripe
/** * Subscribe the user to a new plan. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function subscribe(Request $request) { $this->validateSubscription($request); $this->users->createSubscriptionOnStripe($request, Auth::user()); event(new Subscribed(Auth::user())); return $this->users->getCurrentUser(); }
Podeu veure un exemple a:
https://github.com/laravel/spark/blob/fac9fb2bd174a16c93c2198be5996ec824063e29/app/Repositories/UserRepository.php
al mètode:
public function createSubscriptionOnStripe(Request $request, $user) { $plan = Spark::plans()->find($request->plan); $subscription = $user->newSubscription('main', $plan->id); if ($plan->hasTrial() && ! $user->stripe_id) { $subscription->trialDays($plan->trialDays); } if ($request->coupon) { $subscription->withCoupon($request->coupon); } if (Spark::$createSubscriptionsWith) { $this->callCustomUpdater(Spark::$createSubscriptionsWith, $request, [$user, $subscription, $stripeCustomer]); } else { $subscription->create($request->stripe_token); } }
Recursos: