Prefill business QR creation from CRM contact links.
Deploy Ladill QR Plus / deploy (push) Successful in 51s

Decode CRM prefill tokens so contact name, phone, email, and address carry into QR Plus.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-06-23 20:07:20 +00:00
co-authored by Cursor
parent cc22222d6c
commit 67339046d4
4 changed files with 51 additions and 8 deletions
+8 -1
View File
@@ -73,6 +73,12 @@ class QrCodeController extends Controller
$wallet = $this->manager->walletFor($account);
$qrSettings = $account->getOrCreateQrSetting();
$prefill = \App\Support\CrmPrefillCodec::decode($request->query('prefill'));
$defaultType = $qrSettings->resolvedDefaultType();
if (($prefill['kind'] ?? null) === 'qr_business' && ! empty($prefill['type'])) {
$defaultType = (string) $prefill['type'];
}
return view('qr-codes.create', [
'wallet' => $wallet,
'types' => QrTypeCatalog::all(),
@@ -84,8 +90,9 @@ class QrCodeController extends Controller
'minTopup' => QrWallet::minTopupGhs(),
'ladillWalletBalance' => $this->platformBilling->balanceMinor($account->public_id) / 100,
'topupUrl' => 'https://'.config('app.account_domain').'/wallet',
'defaultType' => $qrSettings->resolvedDefaultType(),
'defaultType' => $defaultType,
'accountDefaultStyle' => $qrSettings->resolvedDefaultStyle(),
'prefill' => ($prefill['kind'] ?? null) === 'qr_business' ? $prefill : null,
]);
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace App\Support;
final class CrmPrefillCodec
{
/** @return array<string, mixed>|null */
public static function decode(?string $token): ?array
{
if (! is_string($token) || $token === '') {
return null;
}
$padded = $token.str_repeat('=', (4 - strlen($token) % 4) % 4);
$json = base64_decode(strtr($padded, '-_', '+/'), true);
if ($json === false) {
return null;
}
try {
$data = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
} catch (\JsonException) {
return null;
}
return is_array($data) ? $data : null;
}
}