فهرست مستندات پروژه

پول و ارز

Pardakhtv1.0.0-beta.4مشاهده منبعفارسی / انگلیسی

مشکل ریال/تومان

ایران دو واحد پولی در استفاده روزمره دارد: ریال (IRR، رسمی) و تومان (IRT، عامیانه، برابر ۱۰ ریال). APIهای درگاه‌های پرداخت ناهماهنگ هستند — برخی ریال و برخی تومان می‌خواهند. یک تبدیل اشتباه یعنی کاربران شما ۱۰ برابر بیشتر یا ۱۰ برابر کمتر پرداخت می‌کنند.

پرداخت این دسته از باگ‌ها را کاملاً با آبجکت مقداری Amount حذف می‌کند.

Amount

Amount یک آبجکت مقداری تغییرناپذیر (immutable) است که مقادیر پولی را داخلی به ریال ذخیره می‌کند. هر درگاه می‌داند API‌اش چه واحدی می‌خواهد و به‌طور خودکار تبدیل می‌کند.

ساخت Amount

use Eram\Pardakht\Money\Amount;

$a = Amount::fromToman(50_000);   // 50,000 تومان = 500,000 ریال
$b = Amount::fromRials(500_000);  // 500,000 ریال = 50,000 تومان

$a->equals($b); // true — مقدار یکسان، ساخت متفاوت

خواندن مقادیر

$amount = Amount::fromToman(25_000);

$amount->inRials(); // 250,000
$amount->inToman(); // 25,000

عملیات ریاضی

تمام عملیات ریاضی نمونه‌های جدید Amount برمی‌گردانند (تغییرناپذیری):

$a = Amount::fromToman(30_000);
$b = Amount::fromToman(20_000);

$a->add($b)->inToman();      // 50,000
$a->subtract($b)->inToman(); // 10,000

کم کردن مقدار بزرگ‌تر از مقدار کوچک‌تر باعث پرتاب InvalidAmountException می‌شود (مبالغ نمی‌توانند منفی باشند).

مقایسه‌ها

$a = Amount::fromToman(30_000);
$b = Amount::fromToman(20_000);

$a->greaterThan($b); // true
$a->lessThan($b);    // false
$a->equals($b);      // false
$a->isZero();        // false

نمایش رشته‌ای

Amount متد __toString() را پیاده‌سازی می‌کند که مقدار ریالی را به صورت رشته برمی‌گرداند:

(string) Amount::fromToman(50_000); // "500000"

Currency Enum

اینام Currency دو واحد پولی را نشان می‌دهد:

use Eram\Pardakht\Money\Currency;

Currency::IRR; // ریال
Currency::IRT; // تومان

Currency::IRR->label(); // "ریال"
Currency::IRT->label(); // "تومان"

نحوه استفاده درگاه‌ها از Amount

نیازی به تبدیل دستی نیست. هر درگاه واحد مورد نیازش را می‌خواند:

// شما می‌نویسید:
$request = new PurchaseRequest(
    amount: Amount::fromToman(50_000),
    // ...
);

// زرین‌پال داخلی $amount->inRials() را فراخوانی می‌کند  → 500,000 ارسال می‌کند
// آیدی‌پی داخلی $amount->inRials() را فراخوانی می‌کند   → 500,000 ارسال می‌کند
// همه درگاه‌ها تبدیل را خودشان انجام می‌دهند

جستجو در مستندات

در همه پروژه‌ها جستجو کنید. با بستن این پنجره به راهنما برمی‌گردید.

Tab برای جابه‌جایی · Enter برای باز کردنEsc برای بستن