chore: add payment routes for our UPS
This commit is contained in:
@@ -254,6 +254,105 @@ class PaymentController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle enhanced checkout with provider selection
|
||||
*/
|
||||
public function enhancedCheckout(Request $request, int $plan, string $provider)
|
||||
{
|
||||
try {
|
||||
$user = $request->user();
|
||||
$planModel = Plan::with(['planProviders', 'trialConfiguration'])->findOrFail($plan);
|
||||
|
||||
// Validate provider support
|
||||
if (! $planModel->supportsProvider($provider)) {
|
||||
session()->flash('error', "Provider '{$provider}' is not supported for this plan.");
|
||||
|
||||
return redirect()->route('dashboard');
|
||||
}
|
||||
|
||||
// Create checkout session via orchestrator
|
||||
$result = $this->orchestrator->createCheckoutSession($user, $planModel, $provider, [
|
||||
'success_url' => route('checkout.success'),
|
||||
'cancel_url' => route('checkout.cancel'),
|
||||
'is_trial' => false,
|
||||
]);
|
||||
|
||||
// Redirect to provider's checkout page
|
||||
if (isset($result['redirect_url'])) {
|
||||
return redirect($result['redirect_url']);
|
||||
}
|
||||
|
||||
// Fallback to session-based checkout
|
||||
if (isset($result['session_url'])) {
|
||||
return redirect($result['session_url']);
|
||||
}
|
||||
|
||||
session()->flash('error', 'Unable to create checkout session. Please try again.');
|
||||
|
||||
return redirect()->route('dashboard');
|
||||
|
||||
} catch (\Exception $e) {
|
||||
session()->flash('error', 'Checkout error: '.$e->getMessage());
|
||||
|
||||
return redirect()->route('dashboard');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle trial-specific checkout flow
|
||||
*/
|
||||
public function trialCheckout(Request $request, int $plan, string $provider)
|
||||
{
|
||||
try {
|
||||
$user = $request->user();
|
||||
$planModel = Plan::with(['trialConfiguration', 'planProviders'])->findOrFail($plan);
|
||||
|
||||
// Validate trial availability
|
||||
if (! $planModel->hasTrial()) {
|
||||
session()->flash('error', 'This plan does not offer trials.');
|
||||
|
||||
return redirect()->route('dashboard');
|
||||
}
|
||||
|
||||
// Validate provider support
|
||||
if (! $planModel->supportsProvider($provider)) {
|
||||
session()->flash('error', "Provider '{$provider}' is not supported for this plan.");
|
||||
|
||||
return redirect()->route('dashboard');
|
||||
}
|
||||
|
||||
$trialConfig = $planModel->getTrialConfig();
|
||||
|
||||
// Create trial checkout session
|
||||
$result = $this->orchestrator->createCheckoutSession($user, $planModel, $provider, [
|
||||
'success_url' => route('checkout.success'),
|
||||
'cancel_url' => route('checkout.cancel'),
|
||||
'is_trial' => true,
|
||||
'trial_duration_days' => $trialConfig?->trial_duration_days ?? 14,
|
||||
'trial_requires_payment_method' => $trialConfig?->trial_requires_payment_method ?? true,
|
||||
]);
|
||||
|
||||
// Redirect to provider's checkout page
|
||||
if (isset($result['redirect_url'])) {
|
||||
return redirect($result['redirect_url']);
|
||||
}
|
||||
|
||||
// Fallback to session-based checkout
|
||||
if (isset($result['session_url'])) {
|
||||
return redirect($result['session_url']);
|
||||
}
|
||||
|
||||
session()->flash('error', 'Unable to create trial checkout session. Please try again.');
|
||||
|
||||
return redirect()->route('dashboard');
|
||||
|
||||
} catch (\Exception $e) {
|
||||
session()->flash('error', 'Trial checkout error: '.$e->getMessage());
|
||||
|
||||
return redirect()->route('dashboard');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle successful payment redirect
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user