ramadanproject/app/Http/Controllers/PaymentController.php
Ahmed Darrazi 45a147253c
Some checks failed
tests / ci (push) Failing after 6m13s
linter / quality (pull_request) Failing after 58s
linter / quality (push) Failing after 1m19s
tests / ci (pull_request) Failing after 5m28s
feat(public-grid): add QA, quickstart, decision docs; scheduler docs; ignore files; tasks updates; run pint
2026-01-03 04:56:12 +01:00

41 lines
1.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Jobs\CompositeImage;
use App\Models\Reservation;
use App\Services\PaymentGateway;
use Illuminate\Http\Request;
class PaymentController extends Controller
{
public function charge(Request $request, PaymentGateway $gateway)
{
$reservationId = (int) $request->input('reservation_id');
$reservation = Reservation::find($reservationId);
if (! $reservation || $reservation->status !== 'held') {
return response()->json(['message' => 'invalid_reservation'], 422);
}
// Compute server-side amount: price_per_cell * area
$pricePerCell = (int) config('pixel_grid.price_per_cell', 100);
$amount = $reservation->w * $reservation->h * $pricePerCell;
$amountCents = $amount; // assume cents already
$charge = $gateway->charge($reservation->id, $amountCents, []);
if ($charge['status'] !== 'succeeded') {
return response()->json(['message' => 'payment_failed'], 402);
}
// Mark reservation confirmed and dispatch composite job
$reservation->status = 'confirmed';
$reservation->save();
dispatch(new CompositeImage($reservation->id));
return response()->json(['status' => 'ok', 'charge' => $charge]);
}
}