fix(zarin): post rial wallet docs as cash via payment, not pooli buy-fi
Zarin kind=payment creates type 55 cash-only rows; it needs zarin_idbank as the counterpart account. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -171,6 +171,12 @@ class ZarinController extends Controller
|
||||
return $nameG !== '' ? $nameG : 'مشتری نقدی (خریدار)';
|
||||
}
|
||||
|
||||
/** کد حساب بانک/صندوق زرین برای kind=payment (وجه نقد) */
|
||||
private function zarinIdBank(): int
|
||||
{
|
||||
return (int) preg_replace('/\D+/', '', (string) $this->Config('zarin_idbank'));
|
||||
}
|
||||
|
||||
/** آیا درخواست لیست زرین را خواسته؟ (query/body/header؛ مقاوم به QUERY_STRING خالی) */
|
||||
private function requestWantsZarinList(Request $request): bool
|
||||
{
|
||||
@@ -2066,28 +2072,31 @@ 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 'مظنه برای سند ریالی زرین در دسترس نیست.';
|
||||
// kind=payment = نوع ۵۵ «وجه نقد» (فقط ریال). id دریافت میکند، idbank پرداخت میکند.
|
||||
$idBank = $this->zarinIdBank();
|
||||
if ($idBank <= 0) {
|
||||
$this->sync()->markFailed($zarin, null, 'کد حساب بانک زرین (zarin_idbank) تنظیم نشده');
|
||||
return 'کد حساب بانک زرین تنظیم نشده است. zarin_idbank را در تنظیمات بگذارید.';
|
||||
}
|
||||
|
||||
$customerCode = (int) $customer->moshtari_code;
|
||||
if ($customerCode <= 0) {
|
||||
$this->sync()->markFailed($zarin, null, 'کد حساب زرین مشتری نامعتبر است');
|
||||
return false;
|
||||
}
|
||||
if ($customerCode === $idBank) {
|
||||
$this->sync()->markFailed($zarin, null, 'zarin_idbank نباید با کد مشتری یکی باشد');
|
||||
return 'کد حساب بانک زرین با کد مشتری یکی است.';
|
||||
}
|
||||
|
||||
try {
|
||||
$http = $this->zarinRequest([
|
||||
'kind' => 'pooli',
|
||||
'radif' => 1,
|
||||
'korf' => $isWithdraw ? 'f' : 'k',
|
||||
'poolorvazn' => 'pool',
|
||||
'meghdar' => $data['value'],
|
||||
'fi' => $mazaneh,
|
||||
'hesab' => $customer->moshtari_code,
|
||||
'kind' => 'payment',
|
||||
'id' => $isWithdraw ? $idBank : $customerCode,
|
||||
'idbank' => $isWithdraw ? $customerCode : $idBank,
|
||||
'mablagh' => (string) (int) abs((float) $data['value']),
|
||||
'sharh' => $sharh,
|
||||
'ayar' => '750',
|
||||
'movaghat' => '',
|
||||
'idFactor' => '',
|
||||
'movaghat' => '0',
|
||||
'uid' => $this->zarinUid('20', $uidSource),
|
||||
]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user