From 102a8e14735f88c0de8ab20b219ff04d2098bf90 Mon Sep 17 00:00:00 2001 From: adonis Date: Tue, 1 Sep 2026 15:45:11 +0330 Subject: [PATCH] fix(zarin): send mazaneh on rial wallet docs so deposits are not rejected MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zarin pooli returns HTTP 400 when fi is empty; a quote within 25% of market is required, which still posts as خرید فی. Co-authored-by: Cursor --- app/Http/Controllers/Admin/ZarinController.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Admin/ZarinController.php b/app/Http/Controllers/Admin/ZarinController.php index b689921..164a4ba 100644 --- a/app/Http/Controllers/Admin/ZarinController.php +++ b/app/Http/Controllers/Admin/ZarinController.php @@ -2066,18 +2066,26 @@ class ZarinController extends Controller $isWithdraw = (int) ($data['direction'] ?? 0) === 1; $uidSource = $data['withdraw_id'] ?? $zarin->id; + // kind=pooli فی خالی را با HTTP 400 «ERROR: fi is empty» رد می‌کند و فی باید در ۲۵٪ مظنه روز باشد. + // نتیجه همیشه نوع ۵۳ «پولی(خرید و فروش)» / عنوان «خرید فی» است (تبدیل ریال به گرم). نوع ۵۵ «وجه نقد» در API این پنل در دسترس نیست. + $prices = $this->lastPriceData(); + $mazaneh = $isWithdraw ? (int) ($prices['sell'] ?? 0) : (int) ($prices['buy'] ?? 0); + if ($mazaneh <= 0) { + $this->sync()->markFailed($zarin, null, 'مظنه برای سند ریالی زرین در دسترس نیست'); + return 'مظنه برای سند ریالی زرین در دسترس نیست.'; + } + try { - // سند ریالی خالص: فی/مظنه نفرست — وگرنه زرین همان مبلغ را به گرم طلا تبدیل می‌کند («خرید فی»). $http = $this->zarinRequest([ 'kind' => 'pooli', 'radif' => 1, 'korf' => $isWithdraw ? 'f' : 'k', 'poolorvazn' => 'pool', 'meghdar' => $data['value'], - 'fi' => '', + 'fi' => $mazaneh, 'hesab' => $customer->moshtari_code, 'sharh' => $sharh, - 'ayar' => '', + 'ayar' => '750', 'movaghat' => '', 'idFactor' => '', 'uid' => $this->zarinUid('20', $uidSource),