Epara Docsتوثيق Eparaالعودة للوحة التحكم
توثيق Epara
دليل تكامل التاجر

Hosted Checkout وMerchant API والتوقيع وIdempotency وقواعد Webhook.

ملف .md

دليل تكامل التاجر

هذا الدليل لمطوري التجار الذين يريدون التكامل مع Epara. التاجر الصغير يمكنه البدء عبر Payment Links دون كود. التجار الأكبر يستخدمون Merchant API وHosted Checkout وWebhooks للأتمتة.

خيارات التكامل

الخيارمن يستخدمه؟متى يستخدم؟
Payment Linkتاجر بلا فريق هندسيتحصيل عبر WhatsApp أو Instagram أو SMS أو البريد.
Hosted Checkoutتاجر لديه موقع أو تطبيقعندما تريد أن تستضيف Epara صفحة الدفع الآمنة.
Merchant APIتاجر لديه backendعند أتمتة الطلبات والفواتير والاسترداد والتحويلات والتقارير.
QR / Code Paymentمتجر فيزيائي أو تحصيل ميدانيعندما يدفع العميل عند الكاشير أو في الموقع.
Webhooksتاجر لديه نظام طلباتعندما يجب أن تصل أحداث payment/refund/payout/dispute إلى نظام التاجر.

البيئات

Environmentالهدفحركة المال
testتكامل وتجربة وQA وcredential تجريبيلا توجد أموال حقيقية.
liveنشاط حقيقي للتاجر والمستهلكسجلات حقيقية في provider وLedger.

بيانات test وlive منفصلة. لا يمكن لـtest credential إنشاء live payments.

قاعدة الطلب الأساسية

طلبات Merchant API يجب أن تحمل ترويسات التوقيع:

POST /api/merchant/payment-links HTTP/1.1
Host: api.epara.example
Content-Type: application/json
X-Epara-Key-Id: key_test_...
X-Epara-Timestamp: 2026-06-16T12:00:00Z
X-Epara-Nonce: 0f7d8a1a-6f0b-4c9d-9f92-8d865bb2a111
X-Epara-Signature: hmac_sha256_signature
X-Epara-API-Version: 2026-06-14.basra
Idempotency-Key: plink_school_2026_001

نموذج التوقيع

Epara توقع method وpath وtimestamp وnonce وAPI version وbody hash. هذا يثبت:

  • الطلب جاء من خادم Merchant.
  • body لم يتغير أثناء النقل.
  • nonce لم يستخدم من قبل.
  • فرق الوقت مقبول.
  • Merchant يستخدم API version المتوقع.

مثال canonical string:

POST
/api/merchant/payment-links
2026-06-16T12:00:00Z
0f7d8a1a-6f0b-4c9d-9f92-8d865bb2a111
2026-06-14.basra
sha256:6fd0a4...

Idempotency

كل طلب ينشئ حالة دائمة أو يحرك المال يجب أن يحمل Idempotency-Key.

العمليةمطلوب؟السبب
Payment create/captureنعملا يجب إنشاء نفس الدفع مرتين.
Refund createنعملا يجب تنفيذ نفس الاسترداد مرتين.
Payout requestنعملا يجب تحويل المال للتاجر مرتين لنفس الطلب.
Payment Link createنعمretry يجب أن يعيد نفس الرابط.
Read/list requestsلالا تنشئ حالة دائمة أو حركة مالية.
{
  "merchantId": "mrc_demo_market",
  "title": "School fee - June 2026",
  "amount": 255000,
  "currency": "IQD",
  "referencePrefix": "SCH-2026",
  "allowedMethods": ["card", "consumer_wallet", "local_method"],
  "successUrl": "https://merchant.example/success",
  "cancelUrl": "https://merchant.example/cancel"
}

استجابة ناجحة:

{
  "id": "plink_school_2026",
  "status": "active",
  "hostedUrl": "https://pay.epara.example/pay/school-fee",
  "amount": { "amount": 255000, "currency": "IQD" }
}

Webhook events

لا يجب أن يعتمد Merchant فقط على redirect URLs. النتيجة النهائية الموثوقة تأتي من webhooks موقعة.

Eventمتى يحدث؟
checkout.session.completedعند اكتمال Hosted Checkout بنجاح.
payment.capturedعندما يصبح Payment حركة نهائية في Ledger.
payment.failedعندما لا يكتمل الدفع.
refund.succeededعند اكتمال الاسترداد.
payout.paidعندما يؤكد Provider دفع Payout.
dispute.openedعند فتح dispute أو chargeback.

تحقق Webhook

على Merchant التحقق من:

  1. X-Epara-Webhook-Signature صحيح.
  2. timestamp داخل نافذة الوقت المقبولة.
  3. event id لم يعالج من قبل.
  4. event type مدعوم.
  5. object id يخص السجل المتوقع في نظام Merchant.

نموذج الأخطاء

HTTP statusالمعنى
400payload غير صالح أو حقل مطلوب ناقص.
401credential مفقود أو التوقيع غير صحيح.
403scope لا يسمح بالعملية.
404object غير موجود أو لا يخص Merchant.
409تعارض idempotency أو حالة object.
422منع بسبب قاعدة أعمال أو حد أو risk أو verification.
429rate limit.
500خطأ داخلي في المنصة. يمكن retry مع idempotency.

Checklist التكامل

  • تم إنشاء test API credential.
  • تم إكمال test payment link أو checkout session.
  • Webhook endpoint يتحقق من التوقيع.
  • تم اختبار retry وidempotency.
  • تم اختبار refund.
  • تمت الموافقة على payout destination وschedule.
  • live API credential منفصل عن test.
  • تم اختبار live webhook endpoint.
  • اكتمل merchant go-live review.