116 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Livewire\Subscription;
 | |
| 
 | |
| use Livewire\Component;
 | |
| use Stripe\Stripe;
 | |
| use Stripe\Checkout\Session;
 | |
| 
 | |
| class PricingPlans extends Component
 | |
| {
 | |
|     public bool $isTrial = false;
 | |
|     public function mount()
 | |
|     {
 | |
|         $this->isTrial = !data_get(currentTeam(), 'subscription.stripe_trial_already_ended');
 | |
|         if (config('constants.limits.trial_period') == 0) {
 | |
|             $this->isTrial = false;
 | |
|         }
 | |
|     }
 | |
|     public function subscribeStripe($type)
 | |
|     {
 | |
|         $team = currentTeam();
 | |
|         Stripe::setApiKey(config('subscription.stripe_api_key'));
 | |
|         switch ($type) {
 | |
|             case 'basic-monthly':
 | |
|                 $priceId = config('subscription.stripe_price_id_basic_monthly');
 | |
|                 break;
 | |
|             case 'basic-yearly':
 | |
|                 $priceId = config('subscription.stripe_price_id_basic_yearly');
 | |
|                 break;
 | |
|             case 'pro-monthly':
 | |
|                 $priceId = config('subscription.stripe_price_id_pro_monthly');
 | |
|                 break;
 | |
|             case 'pro-yearly':
 | |
|                 $priceId = config('subscription.stripe_price_id_pro_yearly');
 | |
|                 break;
 | |
|             case 'ultimate-monthly':
 | |
|                 $priceId = config('subscription.stripe_price_id_ultimate_monthly');
 | |
|                 break;
 | |
|             case 'ultimate-yearly':
 | |
|                 $priceId = config('subscription.stripe_price_id_ultimate_yearly');
 | |
|                 break;
 | |
|             case 'dynamic-monthly':
 | |
|                 $priceId = config('subscription.stripe_price_id_dynamic_monthly');
 | |
|                 break;
 | |
|             case 'dynamic-yearly':
 | |
|                 $priceId = config('subscription.stripe_price_id_dynamic_yearly');
 | |
|                 break;
 | |
|             default:
 | |
|                 $priceId = config('subscription.stripe_price_id_basic_monthly');
 | |
|                 break;
 | |
|         }
 | |
|         if (!$priceId) {
 | |
|             $this->dispatch('error', 'Price ID not found! Please contact the administrator.');
 | |
|             return;
 | |
|         }
 | |
|         $payload = [
 | |
|             'allow_promotion_codes' => true,
 | |
|             'billing_address_collection' => 'required',
 | |
|             'client_reference_id' => auth()->user()->id . ':' . currentTeam()->id,
 | |
|             'line_items' => [[
 | |
|                 'price' => $priceId,
 | |
|                 'quantity' => 1,
 | |
|             ]],
 | |
|             'tax_id_collection' => [
 | |
|                 'enabled' => true,
 | |
|             ],
 | |
|             'automatic_tax' => [
 | |
|                 'enabled' => true,
 | |
|             ],
 | |
| 
 | |
|             'mode' => 'subscription',
 | |
|             'success_url' => route('dashboard', ['success' => true]),
 | |
|             'cancel_url' => route('subscription.index', ['cancelled' => true]),
 | |
|         ];
 | |
|         if (str($type)->contains('ultimate')) {
 | |
|             $payload['line_items'][0]['adjustable_quantity'] = [
 | |
|                 'enabled' => true,
 | |
|                 'minimum' => 10,
 | |
|             ];
 | |
|             $payload['line_items'][0]['quantity'] = 10;
 | |
|         }
 | |
|         if (str($type)->contains('dynamic')) {
 | |
|             $payload['line_items'][0]['adjustable_quantity'] = [
 | |
|                 'enabled' => true,
 | |
|                 'minimum' => 2,
 | |
|             ];
 | |
|             $payload['line_items'][0]['quantity'] = 2;
 | |
|         }
 | |
| 
 | |
|         if (!data_get($team, 'subscription.stripe_trial_already_ended')) {
 | |
|             if (config('constants.limits.trial_period') > 0) {
 | |
|                 $payload['subscription_data'] = [
 | |
|                     'trial_period_days' => config('constants.limits.trial_period'),
 | |
|                     'trial_settings' => [
 | |
|                         'end_behavior' => [
 | |
|                             'missing_payment_method' => 'cancel',
 | |
|                         ]
 | |
|                     ],
 | |
|                 ];
 | |
|             }
 | |
|             $payload['payment_method_collection'] = 'if_required';
 | |
|         }
 | |
|         $customer = currentTeam()->subscription?->stripe_customer_id ?? null;
 | |
|         if ($customer) {
 | |
|             $payload['customer'] = $customer;
 | |
|             $payload['customer_update'] = [
 | |
|                 'name' => 'auto'
 | |
|             ];
 | |
|         } else {
 | |
|             $payload['customer_email'] = auth()->user()->email;
 | |
|         }
 | |
|         $session = Session::create($payload);
 | |
|         return redirect($session->url, 303);
 | |
|     }
 | |
| }
 | 
