Deploy Ladill Mini / deploy (push) Successful in 1m23s
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>
72 lines
2.2 KiB
PHP
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,
|
|
]);
|
|
}
|
|
}
|