المقدمة
قم بإنشاء وتتبع طلبات العملاء عبر دورة الشراء والدفع والتنفيذ بالكامل.
مزيد من المعلومات حول واجهة مستخدم الوحدة https://doc.oneentry.cloud/docs/category/orders
🎯 ماذا تفعل هذه الوحدة؟
تتيح لك وحدة Orders إنشاء وإدارة وتتبع طلبات العملاء — من الخروج إلى الدفع إلى التنفيذ. تقوم ببناء واجهة المستخدم لعربة التسوق؛ تقوم هذه الوحدة بتحويل العربة إلى طلب، ومعاينة الإجماليات (الخصومات، القسائم، المكافآت)، وتتبع الحالة، ومعالجة طلبات الاسترداد.
تعيش الطلبات داخل تخزين الطلبات (حاويات تقوم بتكوينها في لوحة الإدارة) ويتم الإشارة إليها بواسطة علامة التخزين. يتم تفويض الدفع إلى البوابة المكونة لحساب الدفع المختار — انظر وحدة المدفوعات.
🚀 البدء السريع
قم بتهيئة الوحدة من defineOneEntry:
const { Orders } = defineOneEntry( "your-project-url", { "token": "your-app-token" });
قم بإنشاء طلب في تخزين وقراءة النتيجة (يتطلب مصادقة):
// Create an order in the "order_storage_1" storage.
const order = await Orders.createOrder("order_storage_1", {
formIdentifier: "orderForm",
paymentAccountIdentifier: "cash",
formData: [],
products: [{ productId: 2957, quantity: 2 }],
});
console.log(order.id, order.totalSum, order.statusIdentifier);
// 179 "300.00" "inProgress"
✨ المفاهيم الأساسية
ما هو الطلب؟
الطلب هو معاملة شراء من قبل العميل. يحمل كل كائن طلب:
id— معرف الطلبstorageId— تخزين الطلب الذي ينتمي إليهformIdentifier/formData— نموذج الطلب والبيانات التي قدمها العميلproducts— عناصر الخط (productId،quantity،price، …)totalSum/currency— إجمالي الطلب والعملةpaymentAccountIdentifier— حساب الدفع المختارpaymentUrl— رابط الخروج من البوابة (أوnull)statusIdentifier/isCompleted— الحالة الحاليةcreatedDate— الطابع الزمني
هيكل الطلب
{
id: 179,
storageId: 1,
createdDate: '2025-07-03T00:43:02.908Z',
statusIdentifier: 'inProgress',
formIdentifier: 'orderForm',
formData: [
{ marker: 'order_name', type: 'string', value: 'Ivan' }
],
attributeSetIdentifier: 'order_form',
totalSum: '300.00',
currency: 'USD',
paymentAccountIdentifier: 'cash',
paymentAccountLocalizeInfos: { title: 'Cash' },
paymentUrl: null,
products: [
{
id: 2957,
title: 'Cosmo',
sku: null,
previewImage: null,
price: 150,
quantity: 2,
isGift: false,
},
],
isCompleted: true,
}
تخزين الطلبات مقابل الطلبات الفردية
تخزين الطلبات هو حاوية تجمع الطلبات ذات الصلة (على سبيل المثال، الطلبات من نموذج أو قناة مبيعات معينة). الطلبات الفردية هي المعاملات الفعلية داخل التخزين. يمكنك الإشارة إلى التخزين بواسطة علامته وطلب داخله بواسطة العلامة + id.
حالات الطلبات
يحدد كل تخزين مجموعة حالات خاصة به؛ الحالة الحالية للطلب موجودة في statusIdentifier. استرجع الحالات المتاحة لتخزين باستخدام getAllStatusesByStorageMarker()، وقم بتحديث حالة الطلب باستخدام updateOrderByMarkerAndId().
📋 ما تحتاج إلى معرفته
يتم بناء الطلبات من بيانات العربة
تقدم بيانات نموذج الطلب وعناصر الخط؛ يقوم OneEntry بحساب الإجماليات. لإنشاء طلب، تمرر:
formIdentifier— نموذج الطلبformData— حقول النموذج المقدمة من العميلproducts— عناصر الخط (productId،quantity،optional signedPrice)paymentAccountIdentifier— كيف سيدفع العميل
ماذا تفعل الوحدة وماذا لا تفعل
- ✅ إنشاء طلبات من بيانات العربة، معاينة الإجماليات، تحديث الحالة، إدارة طلبات الاسترداد
- ✅ تفويض الدفع إلى البوابة عبر جلسة الدفع /
paymentUrl - ❌ لا توفر واجهة مستخدم عربة التسوق — أنت تبني ذلك
- ❌ لا تخزن بيانات البطاقة الخام — يتم التعامل مع الدفع بواسطة البوابة
الاستردادات
تعيش معالجة الاسترداد في وحدة الطلبات: اطلب استردادًا باستخدام createRefundRequest()، وقم بإدراج طلبات استرداد الطلب باستخدام getRefunds()، وألغِ واحدة باستخدام cancelRefundRequest().
📊 جدول مرجعي سريع
| الطريقة | الوصف |
|---|---|
| createOrder() 🔐 | إنشاء طلب جديد |
| getAllOrdersByMarker() 🔐 | الحصول على جميع الطلبات لتخزين (مقيدة الصفحات) |
| getOrdersStorageByMarker() 🔐 | الحصول على كائن تخزين طلب واحد بواسطة العلامة. |
| getAllOrdersStorage() 🔐 | الحصول على جميع كائنات تخزين الطلبات. |
| getOrderByMarkerAndId() 🔐 | الحصول على طلب واحد بواسطة العلامة و id من كائن تخزين الطلب الذي أنشأه المستخدم. |
| updateOrderByMarkerAndId() 🔐 | تحديث طلب واحد بواسطة العلامة و id من كائن تخزين الطلب الذي أنشأه المستخدم. |
| previewOrder() 🔐 | معاينة إجماليات الطلب، الخصومات والقسائم قبل إنشائه. |
| getAllStatusesByStorageMarker() | الحصول على جميع حالات الطلبات لعلامة التخزين. |
| getRefunds() | الحصول على جميع طلبات الاسترداد لطلب. |
| createRefundRequest() | إنشاء طلب استرداد لطلب. |
| cancelRefundRequest() | إلغاء طلب استرداد لطلب. |
🔐 = يتطلب تفويض
سعر المنتج الثابت (signedPrice)
signedPrice هو رمز مميز يثبت سعر المنتج. عندما يكون موجودًا في عنصر الطلب، يقوم الخادم بخصم ذلك السعر الثابت بالضبط بدلاً من البحث عن السعر مرة أخرى — لذا فإن المبلغ الذي رآه العميل في الكتالوج أو العربة هو المبلغ الذي يدفعه.
signedPrice— النوعstringيتم الحصول على السعر الموقّع للمنتج مع بيانات المنتج عندما يتم تعيين
signPrice.
أين تحصل عليه
لا تقوم بإنشاء signedPrice بنفسك — إنه يصل داخل بيانات المنتج، ولكن فقط عندما تطلب المنتجات مع تعيين signPrice إلى علامة تخزين الطلب الخاصة بك:
- وحدة المنتجات — مرر
signPriceفيuserQuery(getProducts،getProductsByPageUrl، …). - وحدة الكتل — مرر
signPriceكوسيلة توصية (getCartSimilar،getRecentlyViewed، …).
كل منتج تم إرجاعه يحتوي بعد ذلك على سلسلة signedPrice. اقرأ المزيد في قسم إصلاح السعر (signPrice) من وحدة المنتجات.
كيفية استخدامه
مرر الرمز مرة أخرى في كل منتج من جسم createOrder(). يحتفظ الطلب بعد ذلك بالسعر الثابت:
const { items } = await Products.getProducts([], "en_US", { signPrice: "my-order"});
const body = { formIdentifier: "orderForm", paymentAccountIdentifier: "cash", formData: [], products: [ { productId: items[0].id, quantity: 2, signedPrice: items[0].signedPrice } ]};
const order = await Orders.createOrder("my-order", body);
إذا قمت بإغفال signedPrice، يتم إنشاء الطلب بسعر المنتج الحالي في وقت الخروج.
❓ الأسئلة الشائعة (FAQ)
كيف يمكنني إنشاء طلب مع منتجات متعددة؟
مرر مصفوفة من كائنات المنتجات في حقل products من جسم الطلب. يحتاج كل عنصر إلى productId و quantity (ويمكن اختيارياً signedPrice). يتم حساب المجموع الكلي تلقائيًا.
هل يمكنني تحديث الطلب بعد إنشائه؟
نعم — استخدم updateOrderByMarkerAndId() لتعديل تفاصيل الطلب مثل الحالة، بيانات النموذج، أو المنتجات. كن حذرًا عند تغيير العناصر أو الإجماليات بمجرد بدء الدفع.
كيف يمكنني تتبع تغييرات حالة الطلب؟
اقرأ حقل statusIdentifier للحالة الحالية، واسترجع الحالات المتاحة للتخزين باستخدام getAllStatusesByStorageMarker(). يمكنك أيضًا استخدام وحدة الأحداث للتفاعل مع التغييرات.
ما الفرق بين تخزين الطلبات والطلبات الفردية؟
تخزين الطلبات هو حاوية تجمع الطلبات ذات الصلة (على سبيل المثال، الطلبات من نموذج أو قناة مبيعات معينة). الطلبات الفردية هي المعاملات داخل ذلك التخزين. استخدم العلامات لتحديد وتنظيم التخزينات.
كيف يمكنني التعامل مع إلغاء الطلبات والاستردادات؟
قم بتحديث حالة الطلب باستخدام updateOrderByMarkerAndId(). بالنسبة للاستردادات، استخدم طرق استرداد الطلبات: createRefundRequest() لطلب واحد، getRefunds() لإدراج طلبات الطلب، و cancelRefundRequest() لإلغاء واحدة.
🎓 أفضل الممارسات
- المعاينة قبل الإنشاء — اتصل بـ
previewOrder()لعرض الخصومات، القسائم، والمكافآت في ملخص الخروج. - استخدم
signedPriceعندما تتغذى المنتجات إلى الخروج حتى لا يتغير السعر بين التصفح والطلب. - قم بالمصادقة أولاً — تتطلب طرق إنشاء/قراءة/تحديث الطلبات مستخدمًا مصرحًا (انظر AuthProvider).
- قم بتقسيم قوائم الطلبات (
offset+limit) — لا تقم بتحميل كل الطلبات دفعة واحدة. - قم بالإشارة إلى التخزينات والنماذج بواسطة العلامة، وليس بواسطة الاسم المعروض — العلامات مستقرة.
🔗 الوثائق ذات الصلة
- وحدة المنتجات - إدارة المنتجات المتاحة للشراء
- وحدة المدفوعات - إنشاء جلسات دفع للطلبات
- وحدة المستخدمين - إدارة العملاء الذين يقدمون الطلبات
- وحدة AuthProvider - مطلوبة لتفويض طرق الطلب
- وحدة الأحداث - إشعارات حالة الطلب