41 lines
1.7 KiB
PHP
Executable File
41 lines
1.7 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Modules\Paddle\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
use Illuminate\Contracts\View\View;
|
|
use RuntimeException;
|
|
|
|
final class CheckoutController extends Controller
|
|
{
|
|
public function __invoke(): View
|
|
{
|
|
$paddle = config('paddle');
|
|
$token = trim((string) ($paddle['client_side_token'] ?? ''));
|
|
|
|
if ($token === '') {
|
|
throw new RuntimeException('PADDLE_CLIENT_SIDE_TOKEN is not configured.');
|
|
}
|
|
|
|
$plans = [
|
|
'personal-monthly' => ['name' => 'Personal', 'billing' => 'Monthly', 'display_price' => '£4.99 / month', 'price_id' => $paddle['personal_monthly_price_id'], 'activation_limit' => 1],
|
|
'personal-annual' => ['name' => 'Personal', 'billing' => 'Annual', 'display_price' => '£39.99 / year', 'price_id' => $paddle['personal_annual_price_id'], 'activation_limit' => 1],
|
|
'professional-monthly' => ['name' => 'Professional', 'billing' => 'Monthly', 'display_price' => '£8.99 / month', 'price_id' => $paddle['professional_monthly_price_id'], 'activation_limit' => 3],
|
|
'professional-annual' => ['name' => 'Professional', 'billing' => 'Annual', 'display_price' => '£79.99 / year', 'price_id' => $paddle['professional_annual_price_id'], 'activation_limit' => 3],
|
|
];
|
|
|
|
foreach ($plans as $plan) {
|
|
if (trim((string) $plan['price_id']) === '') {
|
|
throw new RuntimeException('One or more Paddle price IDs are not configured.');
|
|
}
|
|
}
|
|
|
|
return view('checkout.buy', [
|
|
'plans' => $plans,
|
|
'paddleToken' => $token,
|
|
'paddleEnvironment' => (string) ($paddle['environment'] ?? 'sandbox'),
|
|
]);
|
|
}
|
|
}
|