Справочник за API на Shopify Scripts

Скриптовете се пишат с Ruby API, който Ви дава голям контрол и гъвкавост.

Има различни типове скриптове. На скрипта се присвоява тип, когато го създавате в приложението Script Editor, в зависимост от това с кой шаблон за скрипт изберете да започнете:

Скриптове за редове

Скриптовете за редове засягат редовете в количката и могат да променят цени и да предоставят отстъпки. Тези скриптове се изпълняват, когато се направи промяна в количката.

Скриптове за редове, които предоставят отстъпка за абонамент, се прилагат само за първото плащане на абонамента. Последващите плащания не получават отстъпка от скрипта.

Някои методи могат да се използват само в скриптове за редове.

Скриптове за доставка

Скриптовете за доставка взаимодействат с доставката и могат да променят начините на доставка и да предоставят отстъпки за тарифите за доставка. Тези скриптове се изпълняват, когато при плащането се стигне до страницата с опции за доставка.

Скриптовете за доставка, които намаляват тарифата за доставка на абонамент, се прилагат само за първото плащане на абонамента. Последващите плащания не получават отстъпка от скрипта.

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

Платежни скриптове

Платежните скриптове взаимодействат с плащанията и могат да преименуват, скриват и пренареждат платежни шлюзове. Имайте предвид, че платежните скриптове не взаимодействат с платежни шлюзове, показани преди екрана за плащане, като например Apple Pay. Тези скриптове се изпълняват, когато при плащането се стигне до страницата за плащане.

Някои методи могат да се използват само в платежни скриптове.

Общи методи

Следните методи могат да се използват във всеки тип скрипт:

Вход

Входни методи за скрипт
МетодТип на връщаната стойностОписание
.cartCartВръща променлив обект на количка.
.localeнизВръща езика и региона на клиента. Например en, fr или pt-BR.

Cart

Обектът Cart е достъпен само в онлайн магазина. Някои незавършени процеси на поръчка имат достъп до обекта Cart. Въпреки това, ако даден процес на плащане е бил затворен и след това клиент посети незавършения процес на поръчка, той го изпраща към предварително попълненото плащане и обектът Cart вече не съществува. Това е така, защото витрината е била заобиколена от имейла за изоставено плащане.

Методи на скрипта, използващи обекта Cart
МетодТип на връщаната стойностОписание
.customerCustomerВръща собственика на количката (ако има такъв).
.shipping_addressShippingAddressВръща адреса за доставка на собственика на количката (ако има такъв).
.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НизВръща кода за отстъпка, използван за прилагане на отстъпката.
.amountMoneyВръща паричната сума на отстъпката.
.reject({ message: String })nilОтхвърля кода за отстъпка, приложен към количката. Изисква се съобщение.
.rejected?БулевВръща информация дали кодът за отстъпка е отхвърлен.

CartDiscount::Percentage

Методи на скрипта, използващи обекта CartDiscount::Percentage
МетодТип на връщаната стойностОписание
.codeНизВръща кода за отстъпка, използван за прилагане на отстъпката.
.percentageДесетиченВръща сумата на отстъпката в процент.
.reject({ message: String })nilОтхвърля кода за отстъпка, приложен към количката. Изисква се съобщение.
.rejected?БулевВръща информация дали кодът за отстъпка е отхвърлен.

CartDiscount::Shipping

Методи на скрипта, използващи обекта CartDiscount::Shipping
МетодТип на връщаната стойностОписание
.codeНизВръща кода за отстъпка, използван за прилагане на отстъпката.
.reject({ message: String })nilОтхвърля кода за отстъпка, приложен към количката. Изисква се съобщение.
.rejected?БулевВръща информация дали кодът за отстъпка е отхвърлен.

Customer

Методи на скрипта, използващи обекта Customer
МетодТип на връщаната стойностОписание
.idЦяло числоВръща идентификационния номер на клиента.
.emailНизВръща имейл адреса на клиента.
.tagsList<Tag>Връща списък с низове, представящи всички тагове, зададени за даден клиент.
.orders_countЦяло числоВръща общия брой поръчки, които клиентът е направил.
.total_spentMoneyВръща общата сума, която клиентът е похарчил за всички поръчки.
.accepts_marketing?БулевВръща информация дали клиентът приема маркетингови съобщения.

LineItem

Методи на скрипта, използващи обекта LineItem
МетодТип на връщаната стойностОписание
.gramsграмовеВръща общото тегло на реда.
.line_priceMoneyЦената на реда.
.discounted?БулевВръща информация дали цената на даден ред е намалена чрез скрипт или ръчно приложена отстъпка. Използването на кодове за отстъпка не влияе на върнатата стойност.
.propertiesХешВръща свойствата, които са посочени за тези редове.
.variantVariantВръща конкретния продуктов вариант, представен от реда.
.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)MoneyКонвертира сума (в центове) от местната валута на клиента (валута на плащане от клиента) във валутата на Вашия магазин. Този метод приема параметъра customer_cents, който приема число в центове. Например Money.derived_from_presentment(customer_cents: 500).
.newMoneyСъздава нов обект, който представя цена.
.zeroMoney

Създава нов обект с нулева цена.

+MoneyСъбира два обекта Money.
-MoneyИзважда един обект Money от друг.
*MoneyУмножава обект Money с число.

Примери за Money

Money.new(cents: 1000)

Създава обект Money, представляващ 1000 цента, или 10 USD.

Money.new(cents: 100) * 50

Създава обект Money, представляващ 1 USD, след което умножава тази сума по 50. Връща обект Money, представляващ 50 USD.

Вариант

Методи на скрипта, използващи обект Variant
МетодТип на връщаната стойностОписание
.idЦяло числоВръща идентификатора на варианта.
.priceMoneyВръща единичната цена на варианта.
.productПродуктВръща свързания продукт на варианта.
.skusСписък<Низ>Връща складовите единици на продукта (SKU) на варианта, които често се използват за проследяване на наличностите.
.titleНизВръща заглавието на варианта.

Продукт

Методи на скрипта, използващи обект 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

Методи на скрипта, използващи обект Cart в скриптове за редове
МетодТип на връщаната стойностОписание
.subtotal_price_wasMoneyВръща междинната сума на количката, преди да са приложени каквито и да било отстъпки.
.subtotal_price_changed?БулевВръща дали междинната сума се е променила.

LineItem

Методи на скрипта, използващи обект LineItem в скриптове за редове
МетодТип на връщаната стойностОписание
.change_line_price(Money new_price, { message: Низ }) MoneyПроменя цената на реда на зададената сума. Изисква се message. new_price трябва да е по-ниска от текущата цена.
.original_line_priceMoneyВръща първоначалната цена на реда, преди да са приложени скриптове и отстъпки.
.line_price_wasMoneyВръща цената на реда, преди да са приложени промени от текущия скрипт.
.line_price_changed?БулевВръща дали цената на реда се е променила.
.change_properties(хеш new_properties, { message: Низ }) ХешЗадава нови свойства за ред. Първоначалният хеш със свойства се съхранява в properties_was, а хешът със свойства, който се предава на метода, се превръща в новите свойства за реда.
.properties_wasХешВръща първоначалния хеш със свойства на реда, преди да са приложени каквито и да било промени.
.properties_changed?БулевВръща дали свойствата за реда са били променени.
.split({ take: Цяло число })РедРазделя ред на два реда. take указва какво количество да се премахне от първоначалния ред, за да се създаде новият ред.

Пример за .split

Този примерен скрипт разделя ред с име original_line_item на два реда. Новият ред е с количество 1 (указано от take: 1). След това скриптът прилага цена с отстъпка към новия ред със съобщението „Third hat for 5 dollars“.

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 в скриптове за редове
МетодТип на връщаната стойностОписание
.compare_at_priceMoneyВръща сравнителната цена на варианта. Връща nil, ако вариантът няма сравнителна цена.

Начини на доставка

Следните методи могат да се използват в скриптове за доставка:

Вход

Методи на скрипта, използващи обект Input в скриптове за доставка
МетодТип на връщаната стойностОписание
.shipping_ratesСписък с тарифи за доставкаВръща списък с всички тарифи за доставка.

ShippingRateList

Методи на скрипта, използващи обекта ShippingRateList в скриптове за доставка
МетодТип на връщаната стойностОписание
.delete_ifСписък с тарифи за доставкаИзтриване на тарифи за доставка с помощта на незадължителен кодов блок. Вижте документацията за метода delete_if на Ruby.
.sort!Списък с тарифи за доставкаСортиране на тарифите за доставка с помощта на оператора за сравнение или на незадължителен кодов блок. Вижте документацията за метода sort! на Ruby.
.sort_by!Списък с тарифи за доставкаСортиране на тарифите за доставка с помощта на незадължителен кодов блок. Вижте документацията за метода sort_by! на Ruby.

ShippingRate

Методи на скрипта, използващи обекта ShippingRate в скриптове за доставка
МетодТип на връщаната стойностОписание
.codeНизВръща кода на тарифата за доставка.
.markupMoneyВръща надценката за тарифа за доставка, ако е приложимо.
.nameНизВръща името на тарифата за доставка. То може да бъде променено с помощта на метода change_name.
.priceMoneyВръща цената на тарифата за доставка.
.sourceНизВръща източника (превозвача), свързан с тарифата за доставка, ако е от значение. Не може да бъде променян.
.change_name(String new_name)Низ Променя името (максимум 255 знака) на тарифата за доставка. Не е възможно да се промени, изтрие или скрие източникът.
.apply_discount(Money discount, { message: String })MoneyПрилага отстъпка с посочената фиксирана сума. Цената не може да бъде намалена под 0. Изисква се съобщение.
.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_brandsСписък<Низ>

Ако платежният шлюз поддържа кредитни карти, връща списък с типовете кредитни карти, които магазинът приема. Ако шлюзът не поддържа кредитни карти, връща празен списък.

.change_name(String new_name)НизПроменя името на платежния шлюз. Платежни шлюзове с лога не могат да бъдат преименувани.

Примери

В следващия пример за скрипт за ред от поръчка, когато клиент поръча продукт, който не е карта за подарък, цената на продукта се намалява с 9 USD. Освен това се показва общата сума, която клиентът е похарчил при всички посещения в магазина Ви:

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

Научете повече

Научете повече за: