0 ORDER BY price ASC"); $response->json([ 'status' => 'success', 'data' => $plans ]); } /** * Upgrade or submit payment for a plan * POST /api/billing/upgrade */ public function upgrade(Request $request, Response $response): void { $companyId = $request->company_id; $body = $request->getBody(); $planId = $body['plan_id'] ?? null; $paymentMethod = $body['payment_method'] ?? 'manual'; // 'paymob', 'cliq', 'binance', etc. $receiptReference = $body['receipt_reference'] ?? null; if (!$planId) { $response->status(400)->json(['error' => 'Missing plan_id']); return; } $plan = Database::selectOne("SELECT * FROM subscription_plans WHERE id = ?", [$planId]); if (!$plan) { $response->status(404)->json(['error' => 'Plan not found']); return; } try { if ($paymentMethod === 'paymob') { // Here we would integrate Paymob API to generate a payment link // For now, we simulate returning a checkout URL. $checkoutUrl = "https://paymob.com/checkout/mock_url_for_plan_{$planId}_company_{$companyId}"; $response->json([ 'status' => 'success', 'message' => 'Redirect to Paymob to complete payment', 'checkout_url' => $checkoutUrl ]); } else { // Manual Payment (CliQ, Binance, Bank Transfer) if (empty($receiptReference)) { $response->status(400)->json(['error' => 'Please provide a receipt reference or transaction ID']); return; } // Delete any existing pending requests for this company to avoid spam Database::execute("DELETE FROM company_subscriptions WHERE company_id = ? AND status = 'pending_approval'", [$companyId]); // Insert a pending subscription request Database::execute(" INSERT INTO company_subscriptions (company_id, plan_id, status, starts_at, ends_at, payment_method, receipt_reference) VALUES (?, ?, 'pending_approval', NOW(), DATE_ADD(NOW(), INTERVAL 30 DAY), ?, ?) ", [$companyId, $planId, $paymentMethod, $receiptReference]); $response->json([ 'status' => 'success', 'message' => 'Payment receipt submitted successfully. Your account will be upgraded after admin approval.' ]); } } catch (\Exception $e) { $response->status(500)->json(['error' => 'Failed to process upgrade request: ' . $e->getMessage()]); } } }