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

Скрипты пишутся с использованием API Ruby, который обеспечивает высокий уровень контроля и гибкости.

Существуют различные типы скриптов. Тип присваивается скрипту при его создании в приложении Script Editor в зависимости от выбранного вами исходного шаблона:

Скрипты позиций

Скрипты позиций влияют на позиции в корзине и могут изменять цены и предоставлять скидки. Эти скрипты запускаются при внесении изменений в корзину.

Скрипты позиций, предоставляющие скидку на подписку, применяются только к первому платежу по ней. На последующие платежи скидка по скрипту не распространяется.

Некоторые методы могут использоваться только в скриптах позиций.

Скрипты доставки

Скрипты доставки взаимодействуют с доставкой, могут изменять способы доставки и предоставлять скидки на тарифы доставки. Эти скрипты запускаются, когда при оформлении заказа открывается страница с вариантами доставки.

Скрипты доставки, предоставляющие скидку на стоимость доставки по подписке, применяются только к первому платежу по ней. На последующие платежи скидка по скрипту не распространяется.

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

Платёжные скрипты

Платёжные скрипты взаимодействуют с оплатой и могут переименовывать, скрывать и изменять порядок платёжных шлюзов. Обратите внимание, что платёжные скрипты не взаимодействуют с платёжными шлюзами, которые отображаются до экрана оформления заказа, например с Apple Pay. Эти скрипты запускаются, когда при оформлении заказа открывается страница оплаты.

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

Общие методы

Следующие методы можно использовать в скриптах любого типа:

Input

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

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
МетодТип возвращаемого значенияОписание
.codeStringВозвращает код скидки, использованный для её применения.
.amountMoneyВозвращает сумму скидки.
.reject({ message: String })nilОтклоняет код скидки, применённый к корзине. Параметр message является обязательным.
.rejected?BooleanВозвращает значение, указывающее, был ли отклонён код скидки.

CartDiscount::Percentage

Методы скрипта, использующие объект CartDiscount::Percentage
МетодТип возвращаемого значенияОписание
.codeStringВозвращает код скидки, использованный для её применения.
.percentageDecimalВозвращает размер скидки в процентах.
.reject({ message: String })nilОтклоняет код скидки, применённый к корзине. Параметр message является обязательным.
.rejected?BooleanВозвращает значение, указывающее, был ли отклонён код скидки.

CartDiscount::Shipping

Методы скриптов, использующие объект CartDiscount::Shipping
МетодТип возвращаемого значенияОписание
.codeStringВозвращает код скидки, использованный для её применения.
.reject({ message: String })nilОтклоняет код скидки, применённый к корзине. Параметр message является обязательным.
.rejected?BooleanВозвращает значение, указывающее, был ли отклонён код скидки.

Клиент

Методы скриптов, использующие объект Customer
МетодТип возвращаемого значенияОписание
.idЦелое числоВозвращает ИД клиента.
.emailStringВозвращает адрес электронной почты клиента.
.tagsСписок<Tag>Возвращает список строк с тегами, присвоенными клиенту.
.orders_countЦелое числоВозвращает общее количество заказов, оформленных клиентом.
.total_spentMoneyВозвращает общую сумму, которую клиент потратил на все заказы.
.accepts_marketing?BooleanВозвращает, согласен ли клиент на получение маркетинговых материалов.

Позиция

Методы скриптов, использующие объект LineItem
МетодТип возвращаемого значенияОписание
.gramsграммыВозвращает общий вес позиции.
.line_priceMoneyЦена позиции.
.discounted?BooleanВозвращает, была ли снижена цена позиции с помощью скрипта или применённой вручную скидки. Использование кодов скидок не влияет на возвращаемое значение.
.propertiesхешВозвращает свойства, которые были указаны для этой позиции.
.variantВариантВозвращает конкретный вариант товара, представленный этой позицией.
.quantityЦелое числоВозвращает количество данной позиции.
.selling_plan_idЦелое числоВозвращает ИД плана продаж для позиции. Этот метод полезен, если магазин продаёт товары по подписке и скрипту необходимо определять, когда вариант товара продаётся по подписке.

Список

Методы скриптов, использующие объект List
МетодТип возвращаемого значенияОписание
.newСписокСоздаёт новый объект для представления списка.
.[]Элемент или nil

Возвращает элемент по указанному индексу.

.&Список

Возвращает новый список, содержащий общие для двух списков элементы без дубликатов.

.delete_ifСписокУдаляет элементы с помощью необязательного блока кода. См. документацию по методу delete_if в Ruby.
.empty?Boolean

Возвращает 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)Список

Вызывает блок кода для каждого элемента списка, передавая этот элемент в блок в качестве параметра.

Адрес доставки

Методы скриптов, использующие объект ShippingAddress
МетодТип возвращаемого значенияОписание
.namestringВозвращает имя человека, указанное в адресе доставки.
.address1stringВозвращает основную часть адреса доставки (улицу, дом).
.address2stringВозвращает необязательное дополнительное поле адреса доставки.
.phonestringВозвращает номер телефона из адреса доставки.
.citystringВозвращает город из адреса доставки.
.zipstringВозвращает почтовый индекс из адреса доставки.
.provincestringВозвращает провинцию/штат из адреса доставки.
.province_codestringВозвращает сокращённое название провинции/штата из адреса доставки.
.country_codestringВозвращает код страны из адреса доставки.

Деньги

Методы скриптов, использующие объект 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 $.

Money.new(cents: 100) * 50

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

Вариант

Методы скриптов для объекта Variant
МетодТип возвращаемого значенияОписание
.idЦелое числоВозвращает ИД варианта.
.priceMoneyВозвращает цену за единицу товара для варианта.
.productProductВозвращает связанный с вариантом товар.
.skusList<String>Возвращает единицы учёта запасов (артикулы) варианта, которые часто используются для отслеживания товарных запасов.
.titleStringВозвращает название варианта.

Товар

Методы скриптов для объекта Product
МетодТип возвращаемого значенияОписание
.idЦелое числоВозвращает ИД товара.
.gift_card?BooleanВозвращает значение, указывающее, является ли товар подарочной картой.
.tagsСписок<Tag>Возвращает список строк, представляющих теги, которые заданы для этого товара.
.product_typeStringКатегория, которой можно маркировать товар. Обычно используется для фильтрации и поиска.
.vendorStringВозвращает продавца этого товара.

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?BooleanВозвращает значение, указывающее, изменился ли промежуточный итог.

Позиция

Методы скриптов для объекта LineItem в скриптах позиций
МетодТип возвращаемого значенияОписание
.change_line_price(Money new_price, { message: String }) MoneyИзменяет цену позиции на указанную сумму. Параметр message обязателен. Цена new_price должна быть ниже текущей.
.original_line_priceMoneyВозвращает исходную цену позиции до применения скриптов и скидок.
.line_price_wasMoneyВозвращает цену позиции до того, как текущий скрипт применил изменения.
.line_price_changed?BooleanВозвращает значение, указывающее, изменилась ли цена позиции.
.change_properties(hash new_properties, { message: String }) хешЗадаёт новые свойства для позиции. Исходный хеш свойств сохраняется в properties_was, а хеш свойств, переданный в метод, становится новыми свойствами для этой позиции.
.properties_wasхешВозвращает исходный хеш свойств позиции до применения каких-либо изменений.
.properties_changed?BooleanВозвращает значение, указывающее, были ли изменены свойства позиции.
.split({ take: Integer })LineItemРазделяет одну позицию на две. Параметр 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

Методы скриптов для объекта Input в скриптах доставки
МетодТип возвращаемого значенияОписание
.shipping_ratesShippingRateListВозвращает список всех тарифов доставки.

ShippingRateList

Методы скриптов, использующие объект ShippingRateList в скриптах доставки
МетодТип возвращаемого значенияОписание
.delete_ifShippingRateListУдаляет тарифы доставки с помощью необязательного блока кода. См. документацию по методу delete_if в Ruby.
.sort!ShippingRateListСортирует тарифы доставки с помощью оператора сравнения или необязательного блока кода. См. документацию по методу sort! в Ruby.
.sort_by!ShippingRateListСортирует тарифы доставки с помощью необязательного блока кода. См. документацию по методу sort_by! в Ruby.

ShippingRate

Методы скриптов, использующие объект ShippingRate в скриптах доставки
МетодТип возвращаемого значенияОписание
.codeStringВозвращает код тарифа доставки.
.markupMoneyВозвращает наценку для тарифа доставки, если она применима.
.nameStringВозвращает название тарифа доставки. Его можно изменить с помощью метода change_name.
.priceMoneyВозвращает стоимость тарифа доставки.
.sourceStringВозвращает источник (перевозчика), связанный с тарифом доставки, если это применимо. Его нельзя изменить.
.change_name(String new_name)String Изменяет название (не более 255 символов) тарифа доставки. Изменить, удалить или скрыть источник невозможно.
.apply_discount(Money discount, { message: String })MoneyПрименяет скидку на указанную фиксированную сумму. Стоимость не может быть ниже 0. Требуется указать сообщение.
.phone_required?BooleanВозвращает true, если для получения тарифа доставки требуется номер телефона, или false, если номер телефона не требуется.

Способы оплаты

Следующие методы можно использовать в платежных скриптах:

Input

Методы скриптов, использующие объект Input в платежных скриптах
МетодТип возвращаемого значенияОписание
.payment_gatewaysPaymentGatewaysListВозвращает список всех платежных шлюзов в магазине.

PaymentGatewayList

Методы скриптов, использующие объект PaymentGatewayList в платежных скриптах
МетодТип возвращаемого значенияОписание
.delete_ifPaymentGatewayListУдаляет платежные шлюзы с помощью необязательного блока кода. См. документацию по методу delete_if в Ruby.
.sort!PaymentGatewayListСортирует платежные шлюзы с помощью оператора сравнения или необязательного блока кода. См. документацию по методу sort! в Ruby.
.sort_by!PaymentGatewayListСортирует платежные шлюзы с помощью необязательного блока кода. См. документацию по методу sort_by! в Ruby.

PaymentGateway

МетодТип возвращаемого значенияОписание
.nameStringВозвращает название платежного шлюза.
.enabled_card_brandsList<String>

Если платежный шлюз поддерживает кредитные карты, возвращает список типов кредитных карт, которые принимает магазин. Если шлюз не поддерживает кредитные карты, возвращает пустой список.

.change_name(String new_name)StringИзменяет название платежного шлюза. Платежные шлюзы с логотипами переименовывать нельзя.

Примеры

В следующем примере скрипта для позиций заказа, когда клиент заказывает товар, не являющийся подарочной картой, цена товара снижается на 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

Подробнее

Подробнее: