Embed POS checkouts in a modal/sheet using the seller email.
Deploy Ladill POS / deploy (push) Successful in 40s

Card/MoMo always initializes with the merchant email, and Paystack/Flutterwave/Hubtel open in-page (desktop modal, mobile bottomsheet) instead of a full redirect.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-15 08:29:07 +00:00
co-authored by Cursor
parent 3ea9fdfe33
commit 3c0172f098
10 changed files with 230 additions and 35 deletions
+18 -6
View File
@@ -82,22 +82,34 @@ class SaleController extends Controller
return redirect()->route('pos.sales.index')->with('success', 'Sale deleted.');
}
public function callback(Request $request, PosSale $sale): RedirectResponse
public function callback(Request $request, PosSale $sale): RedirectResponse|View
{
$reference = trim((string) $request->query('reference', $sale->payment_reference ?? ''));
if ($reference === '') {
return redirect()->route('pos.sales.show', $sale)->with('error', 'Missing payment reference.');
return $this->paymentReturn(route('pos.sales.show', $sale), error: 'Missing payment reference.');
}
try {
$sale = $this->sales->completePayCheckout($reference);
} catch (RuntimeException $e) {
return redirect()->route('pos.sales.show', $sale)->with('error', $e->getMessage());
return $this->paymentReturn(route('pos.sales.show', $sale), error: $e->getMessage());
}
return redirect()
->route('pos.sales.show', $sale)
->with('success', 'Payment received.');
return $this->paymentReturn(route('pos.sales.show', $sale), success: 'Payment received.');
}
private function paymentReturn(string $url, ?string $success = null, ?string $error = null): View
{
if ($success) {
session()->flash('success', $success);
}
if ($error) {
session()->flash('error', $error);
}
return view('pos.payment-return', [
'redirect' => $url,
]);
}
}