فهرست مستندات پروژه
مدیریت خطا
سلسلهمراتب استثنا
RuntimeException
└── ErsalException
├── ConnectionException # خطای transport / TLS / JSON decode
├── InvalidAddressException # تلفن / کد پستی / فیلد اجباری نامعتبر
├── InvalidParcelException # وزن یا ابعاد غیرمثبت
├── InvalidAmountException # مقدار ریال منفی
└── ProviderException # شرکت خطا برگرداند
├── BookingException # createShipment شکست خورد
├── TrackingException # هدف track() یافت نشد
└── CancellationException # cancel() توسط وضعیت شرکت رد شد
همه استثناهای ارسال از ErsalException ارث میبرند. یک catch (ErsalException $e) همه را پوشش میدهد.
ProviderException
توسط هر عملیات provider وقتی شرکت خطا برگرداند پرتاب میشود. دسترسیها:
$e->getProviderName(); // 'tipax'، 'post'، ...
$e->getErrorCode(); // int|string — مختص شرکت
$e->getMessage(); // پیام بومیشده (فارسی به صورت پیشفرض)
subclass دقیق میگوید کدام عملیات شکست خورده:
try {
$provider->createShipment($request);
} catch (BookingException $e) {
// مشکل در ثبت
} catch (ConnectionException $e) {
// شبکه/transport — تلاش مجدد امن است
} catch (ProviderException $e) {
// سایر خطاهای شرکت
}
استراتژی retry
ConnectionException— خطای transport گذرا. با backoff دوباره تلاش کنید.TrackingExceptionبا کد ۴۰۴ — مرسوله یافت نشد؛ retry نکنید.BookingExceptionبا کد محدودیت نرخ — صبر کنید و بعد retry کنید.- سایر
ProviderException— معمولاً دائمی؛ log کنید و به اپراتور نمایش دهید.
کدهای خطای هر provider
هر provider enum کد خطای اختصاصی با پیامهای دوزبانه دارد:
use Eram\Ersal\Provider\Tipax\TipaxErrorCode;
try {
$provider->createShipment($request);
} catch (BookingException $e) {
$code = TipaxErrorCode::tryFrom($e->getErrorCode());
echo $code?->message('fa') ?? $e->getMessage();
}
Enumهای مختص هر provider:
Eram\Ersal\Provider\Post\PostErrorCodeEram\Ersal\Provider\Tipax\TipaxErrorCodeEram\Ersal\Provider\Chapar\ChaparErrorCodeEram\Ersal\Provider\Mahex\MahexErrorCodeEram\Ersal\Provider\Amadast\AmadastErrorCodeEram\Ersal\Provider\Paygan\PayganErrorCodeEram\Ersal\Provider\Alopeyk\AlopeykErrorCode
هر enum متد message(string $locale = 'fa') دارد — 'en' برای انگلیسی.
⁅runtimeexception ersalexception connectionexception خطا transport tls json decode invalidaddressexception تلفن کد پستی فیلد اجباری نامعتبر invalidparcelexception وزن یا بعد غیرمثبت invalidamountexception مقدار ریال منفی providerexception شرکت خطا برگرد bookingexception createshipment شکست خورد trackingexception هدف track یافت نشد cancellationexception cancel توسط وضعیت شرکت رد شد همه استثنا استثناه ارسال از ersalexception ارث برد یک catch ersalexception e همه را پوشش داد توسط هر عملیات provider وقتی شرکت خطا برگرد پرتاب شد دسترسی e getprovidername tipax post e geterrorcode int string مختص شرکت e getmessage پیام بومیشد بومی شد فارسی به صورت پیشفرض پیش فرض subclass دقیق گفت کدا عملیات شکست خورد try provider createshipment request catch bookingexception e مشکل در ثبت catch connectionexception e شبکه transport تلاش مجدد امن است catch providerexception e سایر خطا خطاه شرکت connectionexception خطا transport گذرا با backoff دوباره تلاش کرد trackingexception با کد 404 مرسوله یافت نشد retry نکرد bookingexception با کد محدودیت نرخ صبر کرد و بعد retry کرد سایر providerexception معمولا دایمی log کرد و به اپراتور نمایش داد هر provider enum کد خطا اختصاصی با پیام دوزبانه داشت use eram ersal provider tipax tipaxerrorcode try provider createshipment request catch bookingexception e code tipaxerrorcode tryfrom e geterrorcode echo code message fa e getmessage enum enumه مختص هر provider eram ersal provider post posterrorcode eram ersal provider tipax tipaxerrorcode eram ersal provider chapar chaparerrorcode eram ersal provider mahex mahexerrorcode eram ersal provider amadast amadasterrorcode eram ersal provider paygan payganerrorcode eram ersal provider alopeyk alopeykerrorcode هر enum متد message string locale fa داشت en برای انگلیسی⁆
⁅مدیریت خطا⁆
⁅سلسلهمراتب سلسله مراتب استثناproviderexceptionاستراتژی retryکد خطا هر provider⁆