Referencia de la API de Shopify Scripts

Los scripts se escriben con una API de Ruby que ofrece un gran control y flexibilidad.

Hay distintos tipos de scripts. Cuando creas un script en la app Script Editor, se le asigna un tipo según la plantilla de script con la que decidas empezar:

Scripts de líneas de artículo

Los scripts de líneas de artículo afectan las líneas de artículo del carrito y pueden cambiar precios y otorgar descuentos. Estos scripts se ejecutan cuando se hace un cambio en el carrito.

Los scripts de líneas de artículo que aplican un descuento a una suscripción se aplican solo al primer pago de la suscripción. Los pagos posteriores no se descuentan con el script.

Algunos métodos solo se pueden usar en scripts de líneas de artículo.

Scripts de envío

Los scripts de envío interactúan con envío y pueden cambiar los métodos de envío y otorgar descuentos en las tarifas de envío. Estos scripts se ejecutan cuando el proceso de pago llega a la página de opciones de envío.

Los scripts de envío que descuentan la tarifa de envío de una suscripción se aplican solo al primer pago de la suscripción. Los pagos posteriores no se descuentan con el script.

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

Scripts de pago

Los scripts de pago interactúan con pagos y pueden cambiar el nombre, ocultar y reordenar pasarelas de pago. Ten en cuenta que los scripts de pago no interactúan con las pasarelas de pago que se muestran antes de la pantalla de pago, como Apple Pay. Estos scripts se ejecutan cuando el proceso de pago llega a la página de pago.

Algunos métodos solo se pueden usar en scripts de pago.

Métodos generales

Los siguientes métodos se pueden usar en cualquier tipo de script:

Entrada

Métodos de entrada de scripts
MétodoTipo de retornoDescripción
.cartCarritoDevuelve un objeto de carrito modificable.
.localecadenaDevuelve la región del cliente. Por ejemplo, en, fr o pt-BR.

Carrito

El objeto de carrito solo está disponible en la tienda online. Algunos pedidos abandonados tienen acceso al objeto de carrito. Sin embargo, si se cerró un pago y luego un cliente visita el pedido abandonado, se le redirige al pago precargado y el objeto de carrito ya no existe. Esto se debe a que el correo electrónico de carrito abandonado omite la tienda online.

Métodos de script que usan el objeto de carrito
MétodoTipo de retornoDescripción
.customerClienteDevuelve el titular del carrito (si existe).
.shipping_addressDirección de envíoDevuelve la dirección de envío del titular del carrito (si existe).
.discount_codevaría Devuelve:

discount_code está presente si se aplicó un descuento al carrito. Esto no significa necesariamente que el precio del carrito cambie. Por ejemplo, si un descuento aplica a carritos superiores a 50 USD y un script reduce el precio del carrito por debajo de 50 USD, discount_code sigue presente, pero el precio del carrito no cambia.

<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

Métodos de script que usan el objeto CartDiscount::FixedAmount
MétodoTipo de retornoDescripción
.codeCadenaDevuelve el código de descuento usado para aplicar el descuento.
.amountMoneyDevuelve el importe del descuento.
.reject({ message: String })nilRechaza el código de descuento aplicado al carrito. Se requiere un message.
.rejected?BooleanoIndica si se rechazó el código de descuento.

CartDiscount::Percentage

Métodos de script que usan el objeto CartDiscount::Percentage
MétodoTipo de retornoDescripción
.codeCadenaDevuelve el código de descuento usado para aplicar el descuento.
.percentageDecimalDevuelve el porcentaje del descuento.
.reject({ message: String })nilRechaza el código de descuento aplicado al carrito. Se requiere un message.
.rejected?BooleanoIndica si se rechazó el código de descuento.

CartDiscount::Shipping

Métodos de script que usan el objeto CartDiscount::Shipping
MétodoTipo de retornoDescripción
.codeCadenaDevuelve el código de descuento usado para aplicar el descuento.
.reject({ message: String })nilRechaza el código de descuento aplicado al carrito. Se requiere un message.
.rejected?BooleanoIndica si se rechazó el código de descuento.

Customer

Métodos de script que usan el objeto Customer
MétodoTipo de retornoDescripción
.identeroDevuelve el número de identificación del cliente.
.emailCadenaDevuelve la dirección de correo electrónico del cliente.
.tagsList<Etiqueta>Devuelve una lista de cadenas que representan las etiquetas definidas para un cliente.
.orders_countenteroDevuelve el número total de pedidos que ha realizado un cliente.
.total_spentMoneyDevuelve el importe total que el cliente ha gastado en todos los pedidos.
.accepts_marketing?BooleanoDevuelve si el cliente acepta recibir comunicaciones de marketing.

LineItem

Métodos de script que usan el objeto LineItem
MétodoTipo de retornoDescripción
.gramsgramsDevuelve el peso total de la línea de artículo.
.line_priceMoneyEl precio de la línea de artículo.
.discounted?BooleanoDevuelve si el precio de una línea de artículo se ha descontado mediante un script o con un descuento aplicado manualmente. El uso de códigos de descuento no afecta el valor devuelto.
.propertieshashDevuelve las propiedades especificadas para esta línea de artículo.
.variantVariantDevuelve la variante de producto específica que representa esta línea de artículo.
.quantityenteroDevuelve la cantidad de esta línea de artículo.
.selling_plan_identeroDevuelve la identificación del plan de venta de la línea de artículo. Este método es útil cuando la tienda vende suscripciones y quieres que el script detecte cuándo una variante de producto se sold as a subscription.

List

Métodos de script que usan el objeto List
MétodoTipo de retornoDescripción
.newListCrea un objeto nuevo para representar una lista.
.[]elemento o nil

Devuelve el elemento en el índice especificado.

.&List

Devuelve una lista nueva con los elementos comunes a las dos listas, sin duplicados.

.delete_ifListElimina elementos usando un bloque de código opcional. Consulta la documentación de Ruby's delete_if method.
.empty?Booleano

Devuelve true si la lista no contiene elementos.

.firstelemento o nil

Devuelve el primer elemento o nil si la lista está vacía.

.index(*args, &block)int o nil

Devuelve el índice del primer elemento de la lista. Si se indica un bloque en lugar de un argumento, devuelve el índice del primer elemento para el que el bloque sea verdadero.

.rindex(*args, &block)int o nil

Devuelve el índice del último elemento de la lista. Si se indica un bloque en lugar de un argumento, devuelve el índice del primer elemento para el que el bloque sea verdadero.

.lastelemento o nil

Devuelve el último elemento o nil si la lista está vacía.

.lengthint

Devuelve la cantidad de elementos de la lista.

.sizeint

Alias de length.

.each(*args, &block)List

Llama a un bloque una vez por cada elemento de la lista y pasa el elemento como parámetro al bloque.

ShippingAddress

Métodos de script que usan el objeto ShippingAddress
MétodoTipo de retornoDescripción
.namecadenaDevuelve el nombre de la persona asociada a la dirección de envío.
.address1cadenaDevuelve la primera línea de la dirección de envío.
.address2cadenaDevuelve la segunda línea opcional de la dirección de envío.
.phonecadenaDevuelve el número de teléfono de la dirección de envío.
.citycadenaDevuelve la ciudad de la dirección de envío.
.zipcadenaDevuelve el código postal de la dirección de envío.
.provincecadenaDevuelve la provincia o el estado de la dirección de envío.
.province_codecadenaDevuelve la abreviatura de la provincia o el estado de la dirección de envío.
.country_codecadenaDevuelve la abreviatura del país de la dirección de envío.

Money

Métodos de script que usan el objeto Money
MétodoTipo de retornoDescripción
.derived_from_presentment(customer_cents:X)MoneyConvierte un importe (en centavos) de la moneda local del cliente (de presentación) a la moneda de la tienda. Este método acepta el parámetro customer_cents, que admite un número en centavos. Por ejemplo, Money.derived_from_presentment(customer_cents: 500).
.newMoneyCrea un objeto nuevo para representar un precio.
.zeroMoney

Crea un objeto nuevo con un precio de cero.

+MoneySuma dos objetos Money.
-MoneyResta un objeto Money de otro.
*MoneyMultiplica un objeto Money por un número.

Ejemplos de Money

Money.new(cents: 1000)

Crea un objeto Money que representa 1.000 centavos, o 10 USD.

Money.new(cents: 100) * 50

Crea un objeto Money que representa 1 USD y luego multiplica ese importe por 50. Devuelve un objeto Money que representa 50 USD.

Variant

Métodos de script que usan el objeto Variant
MétodoTipo de retornoDescripción
.identeroDevuelve el número de identificación de la variante.
.priceMoneyDevuelve el precio unitario de la variante.
.productProductDevuelve el producto asociado a la variante.
.skusList<String>Devuelve los códigos de artículo (SKU) de la variante, que suelen usarse para rastrear el inventario.
.titleCadenaDevuelve el título de la variante.

Product

Métodos de script que usan el objeto Product
MétodoTipo de retornoDescripción
.identeroDevuelve el número de identificación del producto.
.gift_card?BooleanoDevuelve si el producto es una tarjeta de regalo.
.tagsList<Etiqueta>Devuelve una lista de cadenas que representan las etiquetas configuradas para este producto.
.product_typeCadenaUna clasificación con la que se puede etiquetar un producto, que se usa comúnmente para filtrar y buscar.
.vendorCadenaDevuelve el proveedor de este producto.

Kernel

Kernel es un módulo de Ruby que se incluye en todas las clases. Por eso, sus métodos están disponibles para todos los objetos. Estos métodos funcionan de la misma manera que las funciones globales en otros lenguajes.

Métodos de script que usan el objeto Kernel
MétodoTipo de retornoDescripción
.exitningunoFinaliza la ejecución del script actual sin errores. Si se ejecuta antes de asignar algo a Output.cart, el script no tiene efecto. Es una forma útil de salir de los scripts, por ejemplo, si el cliente no cumple los requisitos para ejecutar el script.

Ejemplo de Kernel

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

Métodos para líneas de artículo

Los siguientes métodos solo se pueden usar en scripts de líneas de artículo:

Carrito

Métodos de script que usan el objeto Cart en scripts de líneas de artículo
MétodoTipo de retornoDescripción
.subtotal_price_wasMoneyDevuelve el subtotal del carrito antes de aplicar descuentos.
.subtotal_price_changed?BooleanoDevuelve si el subtotal ha cambiado.

LineItem

Métodos de script que usan el objeto LineItem en scripts de líneas de artículo
MétodoTipo de retornoDescripción
.change_line_price(Money new_price, { message: String }) MoneyCambia el precio de la línea de artículo al importe especificado. El parámetro message es obligatorio. new_price debe ser menor que el precio actual.
.original_line_priceMoneyDevuelve el precio original de la línea de artículo antes de aplicar scripts y descuentos.
.line_price_wasMoneyDevuelve el precio de la línea de artículo antes de los cambios aplicados por el script actual.
.line_price_changed?BooleanoDevuelve si el precio de la línea de artículo ha cambiado.
.change_properties(hash new_properties, { message: String }) hashEstablece propiedades nuevas para una línea de artículo. El hash de propiedades original se guarda en properties_was y el hash de propiedades que se pasa al método se convierte en las nuevas propiedades de la línea de artículo.
.properties_washashDevuelve el hash de propiedades original de la línea de artículo antes de aplicar cualquier cambio.
.properties_changed?BooleanoDevuelve si las propiedades de la línea de artículo han cambiado.
.split({ take: Integer })LineItemDivide una línea de artículo en dos líneas de artículo. take especifica la cantidad que se quitará de la línea de artículo original para crear la nueva línea de artículo.

Ejemplo de .split

Este script de ejemplo divide una línea de artículo llamada original_line_item en dos líneas de artículo. La nueva línea de artículo tiene una cantidad de 1 (especificada por take: 1). Luego, el script aplica un precio con descuento a la nueva línea de artículo con el mensaje "Tercer sombrero por 5 dólares".

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

Métodos de script que usan el objeto Variant en scripts de líneas de artículo
MétodoTipo de retornoDescripción
.compare_at_priceMoneyDevuelve el precio de comparación de la variante. Devuelve nil si la variante no tiene precio de comparación.

Métodos de envío

Los siguientes métodos se pueden usar en scripts de envío:

Entrada

Métodos de script que usan el objeto Input en scripts de envío
MétodoTipo de retornoDescripción
.shipping_ratesShippingRateListDevuelve una lista de todas las tarifas de envío.

ShippingRateList

Métodos de script que usan el objeto ShippingRateList en scripts de envío
MétodoTipo de retornoDescripción
.delete_ifShippingRateListElimina tarifas de envío con un bloque de código opcional. Consulta la documentación de Ruby's delete_if method.
.sort!ShippingRateListOrdena las tarifas de envío con el operador de comparación o con un bloque de código opcional. Consulta la documentación de Ruby's sort! method.
.sort_by!ShippingRateListOrdena las tarifas de envío con un bloque de código opcional. Consulta la documentación de Ruby's sort_by! method.

ShippingRate

Métodos de script que usan el objeto ShippingRate en scripts de envío
MétodoTipo de retornoDescripción
.codeCadenaDevuelve el código de la tarifa de envío.
.markupMoneyDevuelve el recargo de una tarifa de envío, si corresponde.
.nameCadenaDevuelve el nombre de la tarifa de envío. Se puede modificar con el método change_name.
.priceMoneyDevuelve el precio de la tarifa de envío.
.sourceCadenaDevuelve el origen (la empresa de transporte) asociado a la tarifa de envío, si corresponde. No se puede modificar.
.change_name(String new_name)Cadena Cambia el nombre (máximo 255 caracteres) de la tarifa de envío. No es posible cambiar, eliminar ni ocultar el origen.
.apply_discount(Money discount, { message: String })MoneyAplica un descuento por el monto fijo especificado. El precio no puede quedar por debajo de 0. Se requiere un mensaje.
.phone_required?BooleanoDevuelve true si se requiere un número de teléfono para obtener la tarifa de envío, o false si no se requiere.

Métodos de pago

Estos métodos se pueden usar en scripts de pago:

Entrada

Métodos de script que usan el objeto Input en scripts de pago
MétodoTipo de retornoDescripción
.payment_gatewaysPaymentGatewaysListDevuelve una lista de todas las pasarelas de pago de la tienda.

PaymentGatewayList

Métodos de script que usan el objeto PaymentGatewayList en scripts de pago
MétodoTipo de retornoDescripción
.delete_ifPaymentGatewayListElimina pasarelas de pago con un bloque de código opcional. Consulta la documentación de Ruby's delete_if method.
.sort!PaymentGatewayListOrdena las pasarelas de pago con el operador de comparación o con un bloque de código opcional. Consulta la documentación de Ruby's sort! method.
.sort_by!PaymentGatewayListOrdena las pasarelas de pago con un bloque de código opcional. Consulta la documentación de Ruby's sort_by! method.

PaymentGateway

MétodoTipo de retornoDescripción
.nameCadenaDevuelve el nombre de la pasarela de pago.
.enabled_card_brandsList<String>

Si la pasarela de pago admite tarjetas de crédito, devuelve una lista de los tipos de tarjeta de crédito que acepta la tienda. Si la pasarela no admite tarjetas de crédito, devuelve una lista vacía.

.change_name(String new_name)CadenaCambia el nombre de la pasarela de pago. No se pueden cambiar de nombre las pasarelas de pago con logo.

Ejemplos

En el siguiente ejemplo de script de línea de artículo, cuando un cliente compra un producto que no es una tarjeta de regalo, el precio del producto se reduce en 9 USD. Además, se muestra el monto total que el cliente ha gastado en todas las visitas a la tienda:

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

Más información

Más información sobre: