Files
ladill-mini/app/Http/Controllers/Public/PaymentController.php
T
isaaccladandCursor 5cdc0a046d
Deploy Ladill Mini / deploy (push) Successful in 1m23s
Use Paystack/Ladill Pay on Mini payment landing.
Drop the required MTN MoMo number field and MoMo copy so public payment QRs open Paystack checkout via Ladill Pay like the other restored storefronts.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 14:55:14 +00:00

72 lines
2.2 KiB
PHP

<?php
namespace App\Http\Controllers\Public;
use App\Http\Controllers\Controller;
use App\Models\QrCode;
use App\Services\Mini\MiniPaymentService;
use App\Support\LadillLink;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
use RuntimeException;
class PaymentController extends Controller
{
public function __construct(private MiniPaymentService $payments) {}
public function pay(Request $request, string $shortCode): JsonResponse|RedirectResponse
{
$qrCode = QrCode::query()
->with('user.qrSetting')
->where('short_code', $shortCode)
->where('type', QrCode::TYPE_PAYMENT)
->where('is_active', true)
->firstOrFail();
$validated = $request->validate([
'amount' => 'required|numeric|min:0.01',
'customer_phone' => 'nullable|string|max:32',
]);
try {
$result = $this->payments->initiate($qrCode, $validated);
} catch (RuntimeException $e) {
if ($request->expectsJson()) {
return response()->json(['error' => $e->getMessage()], 422);
}
return back()->withInput()->with('error', $e->getMessage());
}
if ($request->expectsJson()) {
return response()->json([
'checkout_url' => $result['checkout_url'],
'provider' => $result['provider'] ?? null,
]);
}
return redirect()->away($result['checkout_url']);
}
public function callback(Request $request, string $shortCode): RedirectResponse|View
{
$reference = trim((string) $request->query('reference', ''));
if ($reference === '') {
return redirect()->away(LadillLink::url($shortCode))->with('error', 'Missing payment reference.');
}
try {
$payment = $this->payments->complete($reference);
} catch (RuntimeException $e) {
return redirect()->away(LadillLink::url($shortCode))->with('error', $e->getMessage());
}
return view('public.qr.payment-confirmed', [
'payment' => $payment,
'qrCode' => $payment->qrCode,
]);
}
}