feat: landing settings, instant withdraw deduct, and OTP site URL

Add has_landing plus landing_* deploy keys, deduct balance on withdraw request, keep app_url for SMS login links, and clarify Zarin rial wallet document titles.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-05 17:01:39 +03:30
co-authored by Cursor
parent 1c7ea16300
commit 8cee34bfba
13 changed files with 344 additions and 58 deletions
+13 -4
View File
@@ -1861,12 +1861,21 @@ class ZarinController extends Controller
: ['korf' => 'k', 'parDar' => 1];
}
/** شرح سند ریالی زرین — همیشه با واریز/برداشت شروع شود تا «خرید فی» دیده نشود */
/**
* شرح سند ریالی زرین — همیشه «واریز وجه» یا «برداشت وجه».
* دشارژ ادمین و برداشت مشتری هر دو → «برداشت وجه» (پیشوند «واریز اینترنتی به» را زرین خودش می‌گذارد).
*/
private function zarinRialWalletSharh(bool $isDeposit, ?string $note): string
{
$base = $isDeposit ? 'واریز' : 'برداشت';
$base = $isDeposit ? 'واریز وجه' : 'برداشت وجه';
$normalized = self::accountingWalletDesc($isDeposit, $note);
if ($normalized === '' || $normalized === $base) {
$generic = [
'', 'واریز', 'برداشت', 'واریز وجه', 'برداشت وجه',
'واریز ریالی', 'برداشت ریالی',
'شارژ', 'دشارژ', 'شارژ حساب', 'کسر',
'واریز به کیف پول', 'برداشت از کیف پول', 'برداشت از حساب',
];
if (in_array($normalized, $generic, true) || in_array(trim((string) $note), $generic, true)) {
return $base;
}
if (str_starts_with($normalized, $base)) {
@@ -2029,7 +2038,7 @@ class ZarinController extends Controller
$data = array_merge($data, [
'customer_id' => $existing->customer_id,
'value' => $existing->amount,
'direction' => str_contains((string) $existing->desc, 'برداشت') ? 1 : 0,
'direction' => $this->sync()->rialWalletDirectionFromDesc((string) $existing->desc),
'withdraw_id' => $existing->withdraw_id,
]);
}