مرجع واجهة برمجة التطبيقات (API) لـ Shopify Scripts

تُكتب البرامج النصية باستخدام واجهة برمجة التطبيقات (API) لـ Ruby والتي تمنحك قدرًا كبيرًا من التحكم والمرونة.

هناك أنواع مختلفة للبرامج النصية. يُخصّص نوع للبرنامج النصي عند إنشائه في تطبيق Script Editor، بناءً على قالب البرنامج النصي الذي تختار البدء به:

البرامج النصية للبنود

تؤثر البرامج النصية للبنود على البنود الموجودة في سلة التسوق، ويمكنها تغيير الأسعار ومنح الخصومات. يتم تشغيل هذه البرامج النصية عند إجراء تغيير في سلة التسوق.

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

بعض الطرق لا يمكن استخدامها إلا في البرامج النصية للبنود.

البرامج النصية للشحن

تتفاعل البرامج النصية للشحن مع الشحن، ويمكنها تغيير طرق الشحن ومنح خصومات على أسعار الشحن. يتم تشغيل هذه البرامج النصية عندما تصل عملية الدفع إلى صفحة خيارات الشحن.

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

<p>Some methods <a href="#shipping-methods">can only be used in shipping scripts</a>.</p>

البرامج النصية للدفع

تتفاعل البرامج النصية للدفع مع المدفوعات، ويمكنها إعادة تسمية بوابات الدفع وإخفائها وإعادة ترتيبها. لاحظ أن البرامج النصية للدفع لا تتفاعل مع بوابات الدفع التي تظهر قبل شاشة الدفع، مثل Apple Pay. يتم تشغيل هذه البرامج النصية عندما تصل عملية الدفع إلى صفحة الدفع.

بعض الطرق لا يمكن استخدامها إلا في البرامج النصية للدفع.

الطرق العامة

يمكن استخدام الطرق التالية في أي نوع من البرامج النصية:

الإدخال

طرق إدخال البرنامج النصي
الطريقةنوع الإرجاعالوصف
.cartسلة التسوقتُرجع كائن سلة تسوق قابل للتغيير.
.localeسلسلة نصيةتُرجع الإعدادات المحلية للعميل. على سبيل المثال، en، أو fr، أو pt-BR.

سلة التسوق

يتوفر كائن سلة التسوق فقط في المتجر الإلكتروني. تمتلك بعض عمليات الدفع المتروكة صلاحية الوصول إلى كائن سلة التسوق. مع ذلك، إذا أُغلقت عملية الدفع ثم زار العميل عملية الدفع المتروكة، فسيتم توجيهه إلى صفحة الدفع المعبأة مسبقاً ولن يعود كائن سلة التسوق موجوداً. يرجع ذلك إلى تخطي واجهة المتجر عبر رسالة إلكترونية لعملية الدفع المتروكة.

طرق البرنامج النصي التي تستخدم كائن سلة التسوق
الطريقةنوع الإرجاعالوصف
.customerالعميلتُرجع مالك سلة التسوق (إن وُجد).
.shipping_addressعنوان الشحنتُرجع عنوان الشحن لمالك سلة التسوق (إن وُجد).
.discount_codeمتغير تُرجع:

يكون discount_code موجوداً إذا طُبّق خصم على سلة التسوق. هذا لا يعني بالضرورة تغيير سعر سلة التسوق. على سبيل المثال، إذا كان الخصم ينطبق على سلات التسوق التي تتجاوز قيمتها 50 دولاراً أمريكياً، وقام أحد البرامج النصية بتقليل سعر سلة التسوق إلى أقل من 50 دولاراً أمريكياً، فسيظل discount_code موجوداً ولكن سعر سلة التسوق لن يتغير.

<p><a href="/manual/checkout-settings/script-editor/examples/vat-script">See an example of <code>discount_code</code></a>.</p>
  </td>
</tr>
<tr>
  <td scope="row">.line_items</td>
  <td><a href="#list">List</a>&lt;LineItem&gt;</td>
  <td>Returns a list containing the line items in the cart.</td>
</tr>
<tr>
  <td scope="row">.presentment_currency</td>
  <td><a href="#list">List</a>&lt;String&gt;</td>
  <td>Returns the customer's local (presentment) currency (in <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO 4217</a> format). For example, USD. </td>
</tr>
<tr>
  <td scope="row">.subtotal_price</td>
  <td><a href="#money">Money</a></td>
  <td>Returns the subtotal price of the cart after line item discounts are applied but before discount codes are applied.</td>
</tr>
<tr>
  <td scope="row">.total_weight</td>
  <td><a href="https://shopify.dev/api/liquid/objects/line_item#line_item-grams">grams</a></td>
  <td>Returns the total weight of all the line items in the cart.</td>
</tr>

CartDiscount::FixedAmount

طرق البرنامج النصي التي تستخدم كائن CartDiscount::FixedAmount
الطريقةنوع الإرجاعالوصف
.codeسلسلة نصيةتُرجع رمز الخصم المُستخدم لتطبيق الخصم.
.amountمبلغ ماليتُرجع المبلغ المالي للخصم.
.reject({ message: String })nilترفض رمز الخصم المُطبق على سلة التسوق. يُشترط وجود رسالة (message).
.rejected?قيمة منطقيةتُرجع ما إذا كان قد تم رفض رمز الخصم.

CartDiscount::Percentage

طرق البرنامج النصي التي تستخدم كائن CartDiscount::Percentage
الطريقةنوع الإرجاعالوصف
.codeسلسلة نصيةتُرجع رمز الخصم المُستخدم لتطبيق الخصم.
.percentageرقم عشريتُرجع النسبة المئوية للخصم.
.reject({ message: String })nilترفض رمز الخصم المُطبق على سلة التسوق. يُشترط وجود رسالة (message).
.rejected?قيمة منطقيةتُرجع ما إذا كان قد تم رفض رمز الخصم.

CartDiscount::Shipping

طرق البرنامج النصي التي تستخدم كائن CartDiscount::Shipping
الطريقةنوع الإرجاعالوصف
.codeسلسلة نصيةتُرجع رمز الخصم المُستخدم لتطبيق الخصم.
.reject({ message: String })nilترفض رمز الخصم المُطبق على سلة التسوق. يُشترط وجود رسالة (message).
.rejected?قيمة منطقيةتُرجع ما إذا كان قد تم رفض رمز الخصم.

العميل

طرق البرنامج النصي التي تستخدم كائن العميل
الطريقةنوع الإرجاعالوصف
.idعدد صحيحيُرجع رقم معرّف العميل.
.emailسلسلة نصيةيُرجع عنوان البريد الإلكتروني للعميل.
.tagsList<Tag>يُرجع قائمة بسلاسل نصية تمثل أي علامات تم تعيينها للعميل.
.orders_countعدد صحيحيُرجع إجمالي عدد الطلبات التي قدمها العميل.
.total_spentمبلغ مالييُرجع إجمالي المبلغ الذي أنفقه العميل على جميع الطلبات.
.accepts_marketing?قيمة منطقيةيُرجع ما إذا كان العميل يقبل التسويق.

LineItem

طرق البرنامج النصي التي تستخدم كائن LineItem
الطريقةنوع الإرجاعالوصف
.gramsجراماتيُرجع إجمالي وزن عنصر السطر.
.line_priceمبلغ ماليسعر عنصر السطر.
.discounted?قيمة منطقيةيُرجع ما إذا كان قد تم خصم سعر عنصر السطر بواسطة برنامج نصي أو خصم مطبّق يدويًا. لا يؤثر استخدام أكواد الخصم على القيمة المُرجعة.
.propertiesتجزئةيُرجع الخصائص التي تم تحديدها لعنصر السطر هذا.
.variantمتغيريُرجع متغير المنتج المحدد الذي يمثله عنصر السطر.
.quantityعدد صحيحيُرجع كمية عنصر السطر هذا.
.selling_plan_idعدد صحيحيُرجع معرّف خطة البيع لعنصر السطر. تُعد هذه الطريقة مفيدة عندما يبيع المتجر اشتراكات وتريد أن يكتشف البرنامج النصي متى يتم بيع متغير منتج كاشتراك.

List

طرق البرنامج النصي التي تستخدم كائن List
الطريقةنوع الإرجاعالوصف
.newListيُنشئ كائنًا جديدًا لتمثيل قائمة.
.[]عنصر أو nil

يُرجع العنصر الموجود في الفهرس المحدد.

.&List

يُرجع قائمة جديدة تحتوي على عناصر مشتركة بين القائمتين، بدون أي تكرارات.

.delete_ifListحذف العناصر باستخدام كتلة برمجية اختيارية. راجع وثائق طريقة delete_if في لغة Ruby.
.empty?قيمة منطقية

يُرجع القيمة true إذا كانت القائمة لا تحتوي على أي عناصر.

.firstعنصر أو nil

يُرجع العنصر الأول أو nil إذا كانت القائمة فارغة.

.index(*args, &block)int أو nil

يُرجع فهرس العنصر الأول في القائمة. إذا تم توفير كتلة بدلاً من وسيطة، فإنه يُرجع فهرس العنصر الأول الذي تكون فيه الكتلة صحيحة (true).

.rindex(*args, &block)int أو nil

يُرجع فهرس العنصر الأخير في القائمة. إذا تم توفير كتلة بدلاً من وسيطة، فإنه يُرجع فهرس العنصر الأول الذي تكون فيه الكتلة صحيحة (true).

.lastعنصر أو nil

يُرجع العنصر الأخير أو nil إذا كانت القائمة فارغة.

.lengthint

يُرجع عدد العناصر في القائمة.

.sizeint

اسم مستعار لـ length.

.each(*args, &block)List

يستدعي كتلة مرة واحدة لكل عنصر في القائمة، ويمرر العنصر كمعلمة إلى الكتلة.

ShippingAddress

طرق البرنامج النصي التي تستخدم كائن ShippingAddress
الطريقةنوع الإرجاعالوصف
.nameسلسلة نصيةيُرجع اسم الشخص المرتبط بعنوان الشحن.
.address1سلسلة نصيةيُرجع جزء عنوان الشارع من عنوان الشحن.
.address2سلسلة نصيةيُرجع الحقل الإضافي الاختياري لجزء عنوان الشارع من عنوان الشحن.
.phoneسلسلة نصيةيُرجع رقم هاتف عنوان الشحن.
.cityسلسلة نصيةيُرجع مدينة عنوان الشحن.
.zipسلسلة نصيةيُرجع الرمز البريدي لعنوان الشحن.
.provinceسلسلة نصيةيُرجع المقاطعة/الولاية لعنوان الشحن.
.province_codeسلسلة نصيةيُرجع القيمة المختصرة للمقاطعة/الولاية لعنوان الشحن.
.country_codeسلسلة نصيةيُرجع القيمة المختصرة لبلد عنوان الشحن.

Money

طرق البرنامج النصي التي تستخدم كائن Money
الطريقةنوع الإرجاعالوصف
.derived_from_presentment(customer_cents:X)مبلغ مالييُحوّل مبلغًا (بالسنتات) من العملة المحلية للعميل (عملة العرض) إلى عملة متجرك. تقبل هذه الطريقة المعلمة customer_cents، والتي تقبل رقمًا بالسنتات. على سبيل المثال، Money.derived_from_presentment(customer_cents: 500).
.newمبلغ مالييُنشئ كائنًا جديدًا لتمثيل السعر.
.zeroمبلغ مالي

ينشئ كائنًا جديدًا بسعر صفر.

+مبلغ مالييجمع كائني Money.
-مبلغ مالييطرح كائن Money من كائن آخر.
*مبلغ مالييضرب كائن Money في رقم.

أمثلة على Money

Money.new(cents: 1000)

ينشئ كائن Money يمثل 1000 سنت، أو 10 دولارات.

Money.new(cents: 100) * 50

ينشئ كائن Money يمثل دولارًا واحدًا، ثم يضرب هذا المبلغ في 50. ويُرجع كائن Money يمثل 50 دولارًا.

المتغير (Variant)

أساليب البرنامج النصي التي تستخدم كائن Variant
الطريقةنوع الإرجاعالوصف
.idعدد صحيحيُرجع رقم مُعرّف المتغير.
.priceمبلغ مالييُرجع سعر الوحدة للمتغير.
.productProductيُرجع المنتج المرتبط بالمتغير.
.skusList<String>يُرجع وحدات الاحتفاظ بالمخزون (SKUs) للمتغير، والتي تُستخدم غالبًا لتتبع المخزون.
.titleسلسلة نصيةيُرجع عنوان المتغير.

المنتج (Product)

أساليب البرنامج النصي التي تستخدم كائن Product
الطريقةنوع الإرجاعالوصف
.idعدد صحيحيُرجع رقم مُعرّف المنتج.
.gift_card?قيمة منطقيةيُرجع ما إذا كان المنتج بطاقة هدايا.
.tagsList<Tag>يُرجع قائمة من السلاسل التي تمثل العلامات المعيَّنة لهذا المنتج.
.product_typeسلسلة نصيةتصنيف يمكن تمييز المنتج به، ويُستخدم عادةً للتصفية والبحث.
.vendorسلسلة نصيةيُرجع مورّد هذا المنتج.

Kernel

Kernel عبارة عن وحدة Ruby يتم تضمينها في كل فئة. ونتيجة لذلك، تتوفر أساليبها لكل كائن. وتعمل هذه الأساليب بنفس الطريقة التي تعمل بها الدوال العامة في اللغات الأخرى.

أساليب البرنامج النصي التي تستخدم كائن Kernel
الطريقةنوع الإرجاعالوصف
.exitلا شيءيُنهي تنفيذ البرنامج النصي الحالي بدون خطأ. وإذا تم تشغيل هذا قبل تعيين أي شيء إلى Output.cart، فلن يكون للبرنامج النصي أي تأثير. وتُعد هذه طريقة مفيدة للخروج من البرامج النصية، على سبيل المثال، إذا كان العميل غير مؤهل لتشغيل البرنامج النصي.

مثال على Kernel

customer = Input.cart.customer
if customer && customer.email.end_with?("@mycompany.com")
  # Employees are not eligible for this promotion.
  exit
end

أساليب البنود

الأساليب التالية قابلة للاستخدام فقط في البرامج النصية للبنود:

سلة التسوق

أساليب البرنامج النصي التي تستخدم كائن Cart في البرامج النصية للبنود
الطريقةنوع الإرجاعالوصف
.subtotal_price_wasمبلغ مالييُرجع سعر المجموع الفرعي لسلة التسوق قبل تطبيق أي خصومات.
.subtotal_price_changed?قيمة منطقيةيُرجع ما إذا كان سعر المجموع الفرعي قد تغيّر.

LineItem

أساليب البرنامج النصي التي تستخدم كائن LineItem في البرامج النصية للبنود
الطريقةنوع الإرجاعالوصف
.change_line_price(Money new_price, { message: String }) مبلغ مالييغيّر سعر البند إلى المبلغ المحدَّد. ويُشترط وجود رسالة message. كما يجب أن يكون السعر الجديد new_price أقل من السعر الحالي.
.original_line_priceمبلغ مالييُرجع السعر الأصلي للبند قبل تطبيق البرامج النصية والخصومات.
.line_price_wasمبلغ مالييُرجع سعر البند قبل تطبيق التغييرات بواسطة البرنامج النصي الحالي.
.line_price_changed?قيمة منطقيةيُرجع ما إذا كان سعر البند قد تغيّر.
.change_properties(hash new_properties, { message: String }) تجزئةيعيِّن خصائص جديدة للبند. يتم تخزين تجزئة الخصائص الأصلية في properties_was وتصبح تجزئة الخصائص التي يتم تمريرها إلى الأسلوب هي الخصائص الجديدة للبند.
.properties_wasتجزئةيُرجع تجزئة الخصائص الأصلية للبند قبل تطبيق أي تغييرات.
.properties_changed?قيمة منطقيةيُرجع ما إذا كانت خصائص البند قد تغيّرت.
.split({ take: Integer })LineItemيقسّم بندًا إلى بندين. يحدد take الكمية التي يجب إزالتها من البند الأصلي لإنشاء البند الجديد.

مثال على .split

يقسّم هذا البرنامج النصي كمثال بندًا يُسمى original_line_item إلى بندين. يحتوي البند الجديد على كمية مقدارها 1 (محددة بواسطة take: 1). ويطبّق البرنامج النصي بعد ذلك سعرًا مخفَّضًا على البند الجديد مع الرسالة "قبعة ثالثة مقابل 5 دولارات".

if original_line_item.quantity >= 3
  new_line_item = original_line_item.split(take: 1)
  new_line_item.change_line_price(Money.new(cents: 500), message: "Third hat for 5 dollars")
  cart.line_items << new_line_item
end

المتغير (Variant)

أساليب البرنامج النصي التي تستخدم كائن Variant في البرامج النصية للبنود
الطريقةنوع الإرجاعالوصف
.compare_at_priceمبلغ مالييُرجع السعر المقارن للمتغير. ويُرجع nil إذا لم يكن للمتغير سعر مقارن.

أساليب الشحن

الأساليب التالية قابلة للاستخدام في البرامج النصية للشحن:

الإدخال

أساليب البرنامج النصي التي تستخدم كائن Input في البرامج النصية للشحن
الطريقةنوع الإرجاعالوصف
.shipping_ratesShippingRateListيُرجع قائمة بجميع أسعار الشحن.

ShippingRateList

أساليب البرنامج النصي التي تستخدم كائن ShippingRateList في البرامج النصية للشحن
الطريقةنوع الإرجاعالوصف
.delete_ifShippingRateListاحذف أسعار الشحن باستخدام كتلة تعليمات برمجية اختيارية. راجع وثائق طريقة delete_if في لغة Ruby.
.sort!ShippingRateListفرز أسعار الشحن باستخدام عامل المقارنة أو باستخدام كتلة تعليمات برمجية اختيارية. راجع وثائق طريقة sort! في لغة Ruby.
.sort_by!ShippingRateListفرز أسعار الشحن باستخدام كتلة تعليمات برمجية اختيارية. راجع وثائق طريقة sort_by! في لغة Ruby.

ShippingRate

طرق البرامج النصية التي تستخدم كائن ShippingRate في البرامج النصية للشحن
الطريقةنوع الإرجاعالوصف
.codeسلسلة نصيةتُرجع رمز سعر الشحن.
.markupمبلغ ماليتُرجع الزيادة في سعر الشحن، إن وُجدت.
.nameسلسلة نصيةتُرجع اسم سعر الشحن. ويمكن تعديله باستخدام طريقة change_name.
.priceمبلغ ماليتُرجع سعر الشحن.
.sourceسلسلة نصيةتُرجع المصدر (شركة النقل) المرتبط بسعر الشحن، إن وُجد. ولا يمكن تعديله.
.change_name(String new_name)سلسلة نصية تُغيّر اسم سعر الشحن (بحد أقصى 255 حرفًا). لا يمكن تغيير المصدر أو حذفه أو إخفاؤه.
.apply_discount(Money discount, { message: String })مبلغ ماليتطبق خصمًا بالمبلغ الثابت المُحدد. لا يمكن تقليل السعر إلى ما دون الصفر. يُشترط وجود رسالة.
.phone_required?قيمة منطقيةتُرجع القيمة true إذا كان رقم الهاتف مطلوبًا للحصول على سعر الشحن، أو القيمة false إذا لم يكن رقم الهاتف مطلوبًا.

طرق الدفع

الطرق التالية قابلة للاستخدام في البرامج النصية للدفع:

الإدخال

طرق البرامج النصية التي تستخدم كائن Input في البرامج النصية للدفع
الطريقةنوع الإرجاعالوصف
.payment_gatewaysPaymentGatewaysListتُرجع قائمة بجميع بوابات الدفع في المتجر.

PaymentGatewayList

طرق البرامج النصية التي تستخدم كائن PaymentGatewayList في البرامج النصية للدفع
الطريقةنوع الإرجاعالوصف
.delete_ifPaymentGatewayListحذف بوابات الدفع باستخدام كتلة تعليمات برمجية اختيارية. راجع وثائق طريقة delete_if في لغة Ruby.
.sort!PaymentGatewayListفرز بوابات الدفع باستخدام عامل المقارنة أو باستخدام كتلة تعليمات برمجية اختيارية. راجع وثائق طريقة sort! في لغة Ruby.
.sort_by!PaymentGatewayListفرز بوابات الدفع باستخدام كتلة تعليمات برمجية اختيارية. راجع وثائق طريقة sort_by! في لغة Ruby.

PaymentGateway

الطريقةنوع الإرجاعالوصف
.nameسلسلة نصيةتُرجع اسم بوابة الدفع.
.enabled_card_brandsList<String>

إذا كانت بوابة الدفع تدعم بطاقات الائتمان، فإنها تُرجع قائمة بأنواع بطاقات الائتمان التي يقبلها المتجر. وإذا كانت البوابة لا تدعم بطاقات الائتمان، فإنها تُرجع قائمة فارغة.

.change_name(String new_name)سلسلة نصيةتُغيّر اسم بوابة الدفع. لا يمكن إعادة تسمية بوابات الدفع التي تحتوي على شعارات.

أمثلة

في مثال البرنامج النصي لعنصر السطر التالي، عندما يطلب عميل منتجًا ليس بطاقة هدايا، يتم تخفيض سعر المنتج بمقدار 9 دولارات. ويتم أيضًا عرض إجمالي المبلغ الذي أنفقه العميل خلال جميع زياراته لمتجرك:

customer = Input.cart.customer
Input.cart.line_items.each do |line_item|
  product = line_item.variant.product
  next if product.gift_card?
  line_item.change_line_price(line_item.line_price - Money.new(cents: 900), message: customer.total_spent)
end

Output.cart = Input.cart

معرفة المزيد

معرفة المزيد حول: