✨Custom Actions
Even if the scaffolding comes with basic controller logic to handle new subscriptions or manage existing ones, you are free to change the Billing Portal's actions in app/Actions/BillingPortal
.
You just have to re-write your logic in the action methods and Cashierstream will automatically handle it for you.
namespace App\Actions\BillingPortal;
use Illuminate\Http\Request;
use RenokiCo\BillingPortal\BillingPortal;
use RenokiCo\BillingPortal\Contracts\HandleSubscriptions as HandleSubscriptionsContract;
use RenokiCo\CashierRegister\Plan;
class HandleSubscriptions implements HandleSubscriptionsContract
{
/**
* Mutate the checkout object before redirecting the user to subscribe to a certain plan.
*
* @param \Illuminate\Database\Eloquent\Model $billable
* @param \RenokiCo\CashierRegister\Plan $plan
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function checkoutOnSubscription($subscription, $billable, Plan $plan, Request $request)
{
return $subscription->checkout([
'success_url' => route('billing-portal.subscription.index', ['success' => "You have successfully subscribed to {$plan->getName()}!"]),
'cancel_url' => route('billing-portal.subscription.index', ['error' => "The subscription to {$plan->getName()} was cancelled!"]),
]);
}
/**
* Subscribe the user to a given plan.
*
* @param \Illuminate\Database\Eloquent\Model $billable
* @param \RenokiCo\CashierRegister\Plan $plan
* @param \Illuminate\Http\Request $request
* @return \RenokiCo\CashierRegister\Models\Stripe\Subscription
*/
public function subscribeToPlan($billable, Plan $plan, Request $request)
{
return $billable
->newSubscription($request->subscription, $plan->getId())
->create($billable->defaultPaymentMethod()->id);
}
/**
* Swap the current subscription plan.
*
* @param \RenokiCo\CashierRegister\Models\Stripe\Subscription $subscription
* @param \Illuminate\Database\Eloquent\Model $billable
* @param \RenokiCo\CashierRegister\Plan $plan
* @param \Illuminate\Http\Request $request
* @return \RenokiCo\CashierRegister\Models\Stripe\Subscription
*/
public function swapToPlan($subscription, $billable, Plan $plan, Request $request)
{
if (BillingPortal::proratesOnSwap()) {
return $subscription->swap($plan->getId());
}
return $subscription->noProrate()->swap($plan->getId());
}
/**
* Define the logic to be called when the user requests resuming a subscription.
*
* @param \RenokiCo\CashierRegister\Models\Stripe\Subscription $subscription
* @param \Illuminate\Database\Eloquent\Model $billable
* @param \Illuminate\Http\Request $request
* @return void
*/
public function resumeSubscription($subscription, $billable, Request $request)
{
$subscription->resume();
}
/**
* Define the subscriptioncancellation action.
*
* @param \RenokiCo\CashierRegister\Models\Stripe\Subscription $subscription
* @param \Illuminate\Database\Eloquent\Model $billable
* @param \Illuminate\Http\Request $request
* @return void
*/
public function cancelSubscription($subscription, $billable, Request $request)
{
$subscription->cancel();
}
}
Last updated