نقطتا نهاية POST تحت /api/webhook/order تستخدمان رمز Webhook. راجع تبويب Webhooks/Pushers.
جلب الطلبات: /order/details
| الحقل | مطلوب | المعنى |
|---|
from_date | لا | البداية، بالصيغة 2026-01-31 00:00:00 |
to_date | لا | النهاية، بالصيغة نفسها. يجب أن تكون بعد from_date |
state | لا | إحدى القيم new, approved, processing, delivered, cancel |
بالتاريخين معًا تحصل على كل طلب أُنشئ أو تغيّر ضمن المدة. وإلا تحصل على أحدث 20 طلبًا. طلبات المتجر التجريبي لا تُدرج أبدًا.
state | الطلبات التي يصفّي إليها |
|---|
new | تم وضع الطلب |
approved | مقبول، جاري تحضيره |
processing | تم استلام الطلب |
delivered | تم التسليم |
cancel | ملغى |
قيمة state التي تقرؤها في الاستجابة أوسع: جاهز للاستلام، وتم تعيين عامل التوصيل، وتم استلام الطلب، ومعدل، كلها تظهر بالقيمة processing.
تضع الاستجابة القائمة داخل result:
{ "result": { "status": true, "message": "Success", "data": [ { "order_id": 5123, "order_name": "OD-…", "order_line": [] } ] } }
مفاتيح كل طلب:
| المجموعة | المفاتيح |
|---|
| الهوية | order_id (رقمي)، order_name (رقم الطلب)، cart_no, branch_id, branch |
| العميل | customer, customer_phone, customer_email, customer_delivery_address, address_line, city, area |
| التوقيت | date, last_update_date, delivery_date, delivery_time |
| التوصيل والدفع | delivery_methdod_id, delivery_methdod_name, delivery_charge, purchase_type, payment_type |
| الحالة والإجمالي | state, amount_total |
| البنود | order_line[] وفيه line_id, product_id, product_name, unit_price, quantity, price, varient_id, varient_name, varient_safari_id |
أسماء المفاتيح مكتوبة كما هي معروضة. product_id هو معرّفك الخارجي للمنتج. varient_safari_id هو الباركود الخاص به.
ينتهي كل طلب ببند إضافي واحد قيمة product_id فيه هي delivery_charge. قيمة line_id الخاصة به عشوائية في كل طلب. لا تُعد إرساله في التحديث.
تحديث بنود الطلب: /order/updates
يضبط الكمية المصروفة وسعر الوحدة لبنود الطلب. يُعاد حساب الإجماليات والضريبة.
| الحقل | مطلوب | المعنى |
|---|
username | نعم | أي اسم لنظامك |
password | نعم | رمز Webhook الخاص بك. مطلوب في المحتوى في هذا الطلب، حتى إذا أرسلت الترويسة أيضًا |
order_info | نعم | قائمة فيها طلب واحد على الأقل |
order_info[].order_id | نعم | القيمة الرقمية order_id من /order/details |
order_info[].order_line[].line_id | نعم | قيمة line_id من /order/details |
order_info[].order_line[].quantity | نعم | الكمية المصروفة، 0 أو أكثر |
order_info[].order_line[].price_unit | نعم | سعر الوحدة المصروف، 0 أو أكثر |
يُجيب الطلب بـ HTTP 200 حتى عند تخطي طلبات:
result.message تبدأ بـ | المعنى |
|---|
| "SUCCESS" | تم تحديث كل الطلبات |
| "PARTIAL SUCCESS" | تم تحديث بعضها. skipped_orders تعطي reason لكل طلب من الباقي |
| "No orders were updated" | result.status قيمتها false |
updated_orders تعيد new_total وnew_payable وtax_amount وsub_total لكل طلب.
أسباب قد تراها في skipped_orders أو skipped_lines:
- "Order not found or does not belong to this shop"
- "Empty order_line array - no items to update"
- "Line item not found or does not belong to this order"
- "quantity and price_unit must be numeric values"
- "Order cannot be re-priced: …"
- "The order was being changed at the same moment — nothing was applied, send this order again". هذا السبب يحمل
retryable: true.
ضمن الطلب الواحد، البند الذي فيه مشكلة يُدرج تحت skipped_lines. البنود الصالحة والإجماليات الجديدة تُحفظ معًا.