IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Instal·lació

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.

Configuració de la clau

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ó.

Configuració del model

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'),
],

Suscripcions

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:

Vegeu també

Enllaços externs