chore: add payment routes for our UPS

This commit is contained in:
idevakk
2025-11-28 06:03:43 -08:00
parent d4de074161
commit cc34c9aca3
4 changed files with 229 additions and 2 deletions

View File

@@ -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
*/