# أكواد أخطاء الدفع (/ar/integrate/errors/payment-error-codes)

كل قيمة لـ `lastPaymentError.code`، متجمّعة حسب اللي حصل. الـ URL بتاع كل إدخال هو قيمة `lastPaymentError.docUrl`.

الصفحة دي هي وجهة كل `lastPaymentError.docUrl` اللي كوده كود خطأ دفع. الإرساء (anchors) هنا بيطابق قيمة `code`، فـ `https://docs.xpay.app/integrate/errors/payment-error-codes#card_declined` بيوصلك مباشرةً للصف اللي تحت.

`code` بيقولك نوع الفشل إيه. لسبب البنك المحدّد على الرفض (`lastPaymentError.declineCode`)، شوف [أكواد الرفض](/integrate/errors/decline-codes). للنموذج ونمط المعالِج، شوف [أخطاء الدفع](/integrate/errors/payment-errors).

## الرفض [#الرفض]

الدفعة وصلت للبنك أو لمزوّد الدفع، وهو رفض. `declineCode` بيحمل السبب المحدّد و`adviceCode` بيقولك تعمل إيه بعد كده.

### `card_declined` [#card_declined]

دفعة بطاقة اترفضت. `type: card_error`. اقرا `declineCode` للسبب.

### `payment_declined` [#payment_declined]

دفعة غير بطاقية (Valu، Fawry) اترفضت. `type: payment_method_error`. `declineCode` بيحمل السبب لما المزوّد يدّيه.

## العميل ما كمّلش [#العميل-ما-كمّلش]

### `payment_abandoned` [#payment_abandoned]

العميل مشي قبل ما يخلّص خطوة مطلوبة: تحدّي 3D Secure، أو صفحة الدفع بتاعة المزوّد، أو دفع رقم مرجع Fawry قبل ما ينتهي. مفيش حاجة اتخصمت. العميل يقدر يدفع تاني على نفس جلسة الدفع.

## اترفض قبل ما يوصل للبنك [#اترفض-قبل-ما-يوصل-للبنك]

`type: processor_error`. مفيش بطاقة اتخصم منها ومفيش بنك رفض أي حاجة. الإرشاد: `do_not_try_again`. في أول تلات أكواد إعادة المحاولة هتفشل بنفس الطريقة مهما كانت طريقة الدفع، فاتواصل مع دعم XPay ومعاك `chargeId`. `processor_risk_blocked` مختلف: الفحص بيتعمل على البطاقة والعملية دي بالذات، فبطاقة تانية ممكن تعدي.

### `processor_request_rejected` [#processor_request_rejected]

مزوّد الدفع رفض طلب الدفع قبل ما يوصل لشبكة البطاقات.

### `local_processor_rejected` [#local_processor_rejected]

نفس الفشل لطريقة دفع غير بطاقية: المزوّد رفض الطلب قبل ما يتعمل رقم مرجع قابل للدفع.

### `merchant_config_incomplete` [#merchant_config_incomplete]

إعداد حسابك لطريقة الدفع دي مش مكتمل، فالدفعة ما اتبعتتش.

### `processor_risk_blocked` [#processor_risk_blocked]

فحص المخاطر منع البطاقة دي في العملية دي قبل ما توصل للبنك. اقترح على العميل بطاقة تانية.

## المزوّد ما ردّش [#المزوّد-ما-ردّش]

`type: processor_error`. الإرشاد: `try_again_later`. إعادة المحاولة بنفس البطاقة هي الخطوة الصح.

### `processor_unavailable` [#processor_unavailable]

مزوّد الدفع ما قدرش يخدم الطلب (مشغول أو فيه عطل). مفيش حاجة اتخصمت. إعادة المحاولة بعد شوية بتنجح.

### `processor_session_expired` [#processor_session_expired]

جلسة الدفع انتهت قبل ما العملية تتبعت. مفيش حاجة اتخصمت. إعادة المحاولة بتفتح جلسة جديدة.

### `processor_no_response` [#processor_no_response]

المحاولة انتهت من غير رد من المزوّد، وXPay أكّد إن مفيش حاجة اتخصمت.

### `processor_error` [#processor_error]

المزوّد رجّع خطأ XPay ما قدرش يصنّفه، أو ما قدرناش نوصله. اقرا `merchantMessage` علشان تعرف اللي حصل.

## رايح فين بعد كده [#رايح-فين-بعد-كده]

<Cards>
  <Card icon="<Ban />" title="أكواد الرفض" href="/integrate/errors/decline-codes">
    سبب رفض البنك في `lastPaymentError.declineCode`. أكثر تفصيلًا من الأكواد اللي في الصفحة دي.
  </Card>

  <Card icon="<CreditCard />" title="أخطاء الدفع" href="/integrate/errors/payment-errors">
    النموذج: إزاي `lastPaymentError` متشكّل وإزاي تتعامل معاه.
  </Card>

  <Card icon="<Hash />" title="أكواد أخطاء API" href="/integrate/errors/api-error-codes">
    المرجع التاني: الأكواد اللي بترجع في `error.code` على استدعاء API فاشل.
  </Card>

  <Card icon="<TriangleAlert />" title="أخطاء API" href="/integrate/errors/api-errors">
    مغلّف خطأ الـ API المتزامن.
  </Card>

  <Card icon="<Layers />" title="مقدمة الأخطاء" href="/integrate/errors/introduction">
    رجوع للأول. خريطة المكانين.
  </Card>
</Cards>