المدفوعات
كائن Payment وحالاته وكيف تنتقل عملية الدفع من الإنشاء إلى نتيجة نهائية.
يمثّل كائن Payment محاولة واحدة لتحصيل مبلغ من العميل. تنشئه من خادمك، ويدفع العميل في صفحة الدفع المستضافة، ثم تنتهي العملية بالحالة succeeded أو expired.
دورة الحياة
requires_paymentأُنشئت. بانتظار أن يدفع العميل عبر checkout_url.
processingأرسل العميل الدفع. النتيجة لم تُحسم بعد.
succeededتم تحصيل المبلغ. حالة نهائية. يمكنك تنفيذ الطلب، والاسترداد متاح.
failedرُفضت أو حدث خطأ. راجع failure_code. يمكن دفعها عبر checkout_url حتى expires_at.
canceledألغى العميل الدفع من صفحة الدفع. يمكن دفعها حتى expires_at.
expiredلم تُدفع قبل expires_at. حالة نهائية.
| الحالة | نهائية | المعنى | ما الذي تفعله |
|---|---|---|---|
requires_payment | لا | أُنشئت وتنتظر العميل في checkout_url. | وجّه العميل إلى checkout_url. |
processing | لا | أرسل العميل الدفع ولم تُعرف النتيجة بعد. | اعرض رسالة "نتحقق من دفعتك" وانتظر الـ Webhook. |
succeeded | نعم | تم تحصيل المبلغ. | نفّذ الطلب. الاسترداد متاح. |
failed | لا | رُفضت أو حدث خطأ. يوضح failure_code وfailure_message السبب. | اسمح للعميل بالمحاولة مجددًا عبر checkout_url نفسه حتى expires_at. |
canceled | لا | ضغط العميل إلغاء في صفحة الدفع. | اعرض عليه المحاولة مجددًا عبر checkout_url نفسه. |
expired | نعم | لم تُدفع قبل expires_at. | أنشئ عملية دفع جديدة إذا عاد العميل. |
الحالتان succeeded وexpired نهائيتان ولا تتغيران أبدًا، أما failed وcanceled فليستا كذلك: حتى expires_at يستطيع العميل فتح checkout_url نفسه والدفع مجددًا، فتصبح العملية succeeded. لا تُغلق الطلب عند payment.failed أو payment.canceled، بل انتظر payment.succeeded أو payment.expired.
الاسترداد لا يغيّر status، بل يزيد قيمة amount_refunded. عندما تساوي amount_refunded قيمة amount تكون العملية مستردة بالكامل، وما بين ذلك استرداد جزئي. راجع الاسترداد.
كل تغيير من هذه التغييرات في الحالة يرسل حدث Webhook: payment.succeeded أو payment.failed أو payment.canceled أو payment.expired.
إنشاء عملية دفع
POST /v1/payments
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
amount | عدد صحيح | نعم | المبلغ بالوحدات الصغرى. القيمة 12500 مع KWD تعني 12.500 د.ك. |
currency | نص | نعم | KWD أو SAR أو AED أو QAR أو BHD أو OMR أو JOD أو EGP. |
return_url | نص | نعم | الرابط الذي يعود إليه العميل بعد الدفع، حتى 2,000 حرف. يجب أن يبدأ بـ https:// في الوضع الحي، ويقبل وضع الاختبار http:// أيضًا. راجع معالجة رابط العودة. |
description | نص | لا | حتى 500 حرف. يظهر للعميل في صفحة الدفع وفي لوحة التحكم. |
reference | نص | لا | معرّفك الخاص، مثل رقم الطلب، حتى 100 حرف. يمكنك تصفية المدفوعات به. |
customer | كائن | لا | name وemail وphone (بالصيغة الدولية مثل +96550000000). كلها اختيارية. |
payment_method | نص | لا | عرض هذه الوسيلة وحدها في صفحة الدفع: knet أو mada أو card أو apple_pay أو google_pay أو benefit أو stc_pay. تعتمد الوسائل المتاحة لك على حسابك، والوسيلة التي لا يدعمها حسابك تعيد 422 validation_error. راجع وسائل الدفع وحسابك. |
language | نص | لا | لغة صفحة الدفع: en أو ar. |
send_email | منطقي | لا | true يرسل الدفعة إلى customer.email كفاتورة مع زر ادفع الآن. الافتراضي false. يتطلب customer.email. راجع رسائل الفواتير والإيصالات. |
metadata | كائن | لا | حتى 20 زوجًا من المفاتيح والقيم النصية. راجع البيانات الوصفية. |
expires_in_minutes | عدد صحيح | لا | المهلة المتاحة للعميل كي يدفع، من 5 إلى 43200 (30 يومًا). الافتراضي 60. |
في بعض الحسابات يجب أن تنتهي المبالغ بالعملات ذات المنازل العشرية الثلاث (KWD وBHD وOMR وJOD) بصفر، وإلا فشل الطلب بالخطأ 422 validation_error (details.fields.amount). راجع المبالغ ذات المنازل الثلاث.
الاستجابة 201 Created مع كائن Payment. أرسل الترويسة Idempotency-Key حتى لا تُنشئ إعادةُ المحاولة عمليةَ دفع ثانية (منع التكرار).
كائن Payment
{
"id": "pay_01JBX4T9W2",
"object": "payment",
"livemode": false,
"amount": 12500,
"currency": "KWD",
"amount_refunded": 0,
"status": "succeeded",
"description": "Order #1042",
"reference": "1042",
"customer": { "name": "Sara Ali", "email": "sara@example.com", "phone": "+96550000000" },
"payment_method": "card",
"card": { "brand": "visa", "last4": "1019" },
"channel": "api",
"checkout_url": "https://api.teyra.co/checkout/pay_01JBX4T9W2",
"return_url": "https://shop.example.com/thanks",
"failure_code": null,
"failure_message": null,
"commission": 313,
"net": 12187,
"metadata": { "order_id": "1042" },
"payment_link_id": null,
"created_at": "2026-10-28T14:07:00.000Z",
"paid_at": "2026-10-28T14:08:12.000Z",
"expires_at": "2026-10-28T15:07:00.000Z"
}| الحقل | الوصف |
|---|---|
id | معرّف فريد يبدأ بـ pay_. |
livemode | false للمدفوعات التجريبية وtrue للمدفوعات الحية. |
amount وcurrency | ما يدفعه العميل، بالوحدات الصغرى. |
amount_refunded | إجمالي ما تم استرداده حتى الآن، من 0 إلى amount. |
status | راجع دورة الحياة. |
payment_method | وسيلة الدفع بعد معرفتها: card أو mada أو knet أو apple_pay أو google_pay أو benefit أو stc_pay، أو null. ومع Apple Pay وGoogle Pay يحمل card علامة بطاقة المحفظة وآخر أربعة أرقام منها. |
card | لمدفوعات البطاقات: brand وlast4 فقط. لا تكشف تيرا باي أرقام البطاقات كاملة أبدًا. |
channel | مصدر عملية الدفع: api أو payment_link أو shopify أو woocommerce أو dashboard. |
checkout_url | صفحة الدفع المستضافة لهذه العملية. |
failure_code وfailure_message | سبب الفشل عندما تكون الحالة failed. |
commission وnet | تُحدَّدان عند نجاح الدفع، بالوحدات الصغرى. commission هي رسوم تيرا باي: سعرك (نسبة مئوية زائد مبلغ ثابت لكل عملية دفع)، وهي الرسوم الوحيدة التي تُخصم من الدفعة. وnet هو ما تستلمه: amount − commission. راجع الرسوم والمبلغ الصافي. |
payment_link_id | رابط الدفع الذي أنشأ هذه العملية، إن وُجد. |
paid_at وexpires_at | وقت نجاح الدفع، والموعد النهائي للدفع. |
جلب المدفوعات وعرضها
# One payment
curl https://api.teyra.co/v1/payments/pay_01JBX4T9W2 \
-H "Authorization: Bearer $TEYRA_SECRET_KEY"
# Succeeded payments created in October 2026
curl -G https://api.teyra.co/v1/payments \
-H "Authorization: Bearer $TEYRA_SECRET_KEY" \
-d status=succeeded \
-d created_gte=2026-10-01T00:00:00Z \
-d created_lte=2026-10-31T23:59:59Z \
-d limit=50مرشحات GET /v1/payments: status وreference وcreated_gte وcreated_lte، إضافة إلى limit وcursor (ترقيم الصفحات). المعرّف غير الموجود، أو الذي يخص الوضع الآخر، يعيد 404 payment_not_found.
التالي
- صفحة الدفع المستضافة: مسار إعادة التوجيه خطوة بخطوة.
- وسائل الدفع وحسابك: ما يعتمد على حسابك.
- معالجة رابط العودة: بناء الصفحة التي يعود إليها العملاء.
وضع الاختبار والوضع الحي
ابنِ تكاملك في وضع الاختبار دون أموال حقيقية، ثم انتقل إلى المفاتيح الحية بعد اعتماد حسابك مستعينًا بقائمة التحقق قبل الإطلاق.
وسائل الدفع وحسابك
قيم payment_method التي يقبلها حسابك، وقاعدة المبالغ في العملات ذات المنازل الثلاث، وكيف تعمل صفحة الدفع والرسوم والاسترداد والاعتراضات في كل نوع من الحسابات.