Primjeri skripti za plaćanje
Skripte za plaćanje komuniciraju s pristupnicima za plaćanje i mogu promijeniti naziv, vidljivost i položaj prikaza pristupnika. Te se skripte pokreću svaki put kada vaš korisnik pristupi stranici načina plaćanja prilikom plaćanja. Skripte za plaćanje ne komuniciraju s ubrzanim naplatama jer se ubrzane naplate prikazuju vašim korisnicima prije nego što dođu na stranicu plaćanja.
Da biste upotrijebili predloške na ovoj stranici, izradite novu skriptu s praznim predloškom.
Koraci:
U administratorskom alatu za Shopify idite na Aplikacije > Script Editor.
Kliknite na Izradi skriptu.
Kliknite na Pristupnici za plaćanje.
Odaberite Prazan predložak, a zatim kliknite na Izradi skriptu.
U odjeljku Izvorni kod u programskom jeziku Ruby izbrišite zadanu liniju koda:
Output.cart = Input.cartKopirajte skriptu s ove stranice i zalijepite je u odjeljak Izvorni kod u programskom jeziku Ruby.
Uredite odjeljak skripte Prilagodljive postavke kako bi skripta radila u vašoj trgovini.
Testirajte svoju skriptu. Više informacija potražite u članku Testiranje i otklanjanje pogrešaka u značajci Shopify Scripts.
Nakon testiranja:
- kliknite na Spremi nacrt da biste spremili neobjavljeni nacrt skripte ili
- kliknite na Spremi i objavi da biste izradili i objavili skriptu.
Na ovoj stranici
Prikaz pristupnika za određene korisnike
Upotrijebite ovu skriptu za prikaz samo određene opcije pristupnika za posebno označene korisnike.
Na primjer, prikažite određeni pristupnik samo korisnicima s oznakom VIP – pristupnik je skriven za sve ostale korisnike.
# ================================ Customizable Settings ================================
# ================================================================
# Show Gateways For Customer Tag
#
# If we have a matching customer, the entered gateway(s) will be
# shown, and all others will be hidden. Otherwise, the entered
# gateway(s) will be hidden.
#
# - 'customer_tag_match_type' determines whether we look for the customer
# to be tagged with any of the entered tags or not. Can be:
# - ':include' to check if the customer is tagged
# - ':exclude' to make sure the customer isn't tagged
# - 'customer_tags' is a list of customer tags to trigger the
# campaign
# - 'gateway_match_type' determines whether the below strings
# should be an exact or partial match. Can be:
# - ':exact' for an exact match
# - ':partial' for a partial match
# - 'gateway_names' is a list of strings to identify gateways
# ================================================================
SHOW_GATEWAYS_FOR_CUSTOMER_TAG = [
{
customer_tag_match_type: :include,
customer_tags: ["customer_tag", "another_tag"],
gateway_match_type: :exact,
gateway_names: ["Gateway", "Other Gateway"],
},
]
# ================================ Script Code (do not edit) ================================
# ================================================================
# CustomerTagSelector
#
# Finds whether the supplied customer has any of the entered tags.
# ================================================================
class CustomerTagSelector
def initialize(match_type, tags)
@comparator = match_type == :include ? 'any?' : 'none?'
@tags = tags.map { |tag| tag.downcase.strip }
end
def match?(customer)
customer_tags = customer.tags.map { |tag| tag.downcase.strip }
(@tags & customer_tags).send(@comparator)
end
end
# ================================================================
# GatewayNameSelector
#
# Finds whether the supplied gateway name matches any of the
# entered names.
# ================================================================
class GatewayNameSelector
def initialize(match_type, gateway_names)
@comparator = match_type == :exact ? '==' : 'include?'
@gateway_names = gateway_names.map { |name| name.downcase.strip }
end
def match?(payment_gateway)
@gateway_names.any? { |name| payment_gateway.name.downcase.strip.send(@comparator, name) }
end
end
# ================================================================
# ShowGatewaysForCustomerTagCampaign
#
# If the customer has any of the entered tags, the entered gateways
# are shown/hidden depending on the entered settings
# ================================================================
class ShowGatewaysForCustomerTagCampaign
def initialize(campaigns)
@campaigns = campaigns
end
def run(cart, payment_gateways)
@campaigns.each do |campaign|
customer_tag_selector = CustomerTagSelector.new(
campaign[:customer_tag_match_type],
campaign[:customer_tags],
)
customer_match = cart.customer.nil? ? false : customer_tag_selector.match?(cart.customer)
gateway_name_selector = GatewayNameSelector.new(
campaign[:gateway_match_type],
campaign[:gateway_names],
)
payment_gateways.delete_if do |payment_gateway|
gateway_name_selector.match?(payment_gateway) != customer_match
end
end
end
end
CAMPAIGNS = [
ShowGatewaysForCustomerTagCampaign.new(SHOW_GATEWAYS_FOR_CUSTOMER_TAG),
]
CAMPAIGNS.each do |campaign|
campaign.run(Input.cart, Input.payment_gateways)
end
Output.payment_gateways = Input.payment_gatewaysSkrivanje pristupnika za određene korisnike
Upotrijebite ovu skriptu za skrivanje određenog pristupnika za posebno označene korisnike.
Na primjer, sakrijte određeni pristupnik za korisnike s oznakom HIDE_GATEWAY.
# ================================ Customizable Settings ================================
# ================================================================
# Hide Gateways For Customer Tag
#
# If we have a matching customer, the entered gateway(s) will be
# hidden.
#
# - 'customer_tag_match_type' determines whether we look for the customer
# to be tagged with any of the entered tags or not. Can be:
# - ':include' to check if the customer is tagged
# - ':exclude' to make sure the customer isn't tagged
# - 'customer_tags' is a list of customer tags to trigger the
# campaign
# - 'gateway_match_type' determines whether the below strings
# should be an exact or partial match. Can be:
# - ':exact' for an exact match
# - ':partial' for a partial match
# - 'gateway_names' is a list of strings to identify gateways
# ================================================================
HIDE_GATEWAYS_FOR_CUSTOMER_TAG = [
{
customer_tag_match_type: :include,
customer_tags: ["customer_tag", "another_tag"],
gateway_match_type: :exact,
gateway_names: ["Gateway", "Other Gateway"],
},
]
# ================================ Script Code (do not edit) ================================
# ================================================================
# CustomerTagSelector
#
# Finds whether the supplied customer has any of the entered tags.
# ================================================================
class CustomerTagSelector
def initialize(match_type, tags)
@comparator = match_type == :include ? 'any?' : 'none?'
@tags = tags.map { |tag| tag.downcase.strip }
end
def match?(customer)
customer_tags = customer.tags.map { |tag| tag.downcase.strip }
(@tags & customer_tags).send(@comparator)
end
end
# ================================================================
# GatewayNameSelector
#
# Finds whether the supplied gateway name matches any of the
# entered names.
# ================================================================
class GatewayNameSelector
def initialize(match_type, gateway_names)
@comparator = match_type == :exact ? '==' : 'include?'
@gateway_names = gateway_names.map { |name| name.downcase.strip }
end
def match?(payment_gateway)
@gateway_names.any? { |name| payment_gateway.name.downcase.strip.send(@comparator, name) }
end
end
# ================================================================
# HideGatewaysForCustomerTagCampaign
#
# If we have a matching customer, the entered gateway(s) will be
# hidden.
# ================================================================
class HideGatewaysForCustomerTagCampaign
def initialize(campaigns)
@campaigns = campaigns
end
def run(cart, payment_gateways)
return if cart.customer.nil?
@campaigns.each do |campaign|
customer_tag_selector = CustomerTagSelector.new(
campaign[:customer_tag_match_type],
campaign[:customer_tags],
)
next unless customer_tag_selector.match?(cart.customer)
gateway_name_selector = GatewayNameSelector.new(
campaign[:gateway_match_type],
campaign[:gateway_names],
)
payment_gateways.delete_if do |payment_gateway|
gateway_name_selector.match?(payment_gateway)
end
end
end
end
CAMPAIGNS = [
HideGatewaysForCustomerTagCampaign.new(HIDE_GATEWAYS_FOR_CUSTOMER_TAG),
]
CAMPAIGNS.each do |campaign|
campaign.run(Input.cart, Input.payment_gateways)
end
Output.payment_gateways = Input.payment_gatewaysSkrivanje pristupnika za određene proizvode
Upotrijebite ovu skriptu za skrivanje određenog pristupnika kada se u košaricu dodaju određene stavke.
Na primjer, sakrijte određeni pristupnik ako korisnik naruči šešir.
# ================================ Customizable Settings ================================
# ================================================================
# Hide Gateway(s) for Product
#
# If the cart contains any matching items, the entered gateway(s)
# are hidden.
#
# - 'product_selector_match_type' determines whether we look for
# products that do or don't match the entered selectors. Can
# be:
# - ':include' to check if the product does match
# - ':exclude' to make sure the product doesn't match
# - 'product_selector_type' determines how eligible products
# will be identified. Can be either:
# - ':tag' to find products by tag
# - ':type' to find products by type
# - ':vendor' to find products by vendor
# - ':product_id' to find products by ID
# - ':variant_id' to find products by variant ID
# - ':subscription' to find subscription products
# - 'product_selectors' is a list of strings or numbers to
# identify products by the above selector type
# - 'gateway_match_type' determines whether the below strings
# should be an exact or partial match. Can be:
# - ':exact' for an exact match
# - ':partial' for a partial match
# - 'gateway_names' is a list of strings to identify gateways
# ================================================================
HIDE_GATEWAY_FOR_PRODUCT = [
{
product_selector_match_type: :include,
product_selector_type: :product_id,
product_selectors: [1234567890987, 1234567890986],
gateway_match_type: :exact,
gateway_names: ["Gateway", "Other Gateway"],
},
]
# ================================ Script Code (do not edit) ================================
# ================================================================
# ProductSelector
#
# Finds matching products by the entered criteria.
# ================================================================
class ProductSelector
def initialize(match_type, selector_type, selectors)
@match_type = match_type
@comparator = match_type == :include ? 'any?' : 'none?'
@selector_type = selector_type
@selectors = selectors
end
def match?(line_item)
if self.respond_to?(@selector_type)
self.send(@selector_type, line_item)
else
raise RuntimeError.new('Invalid product selector type')
end
end
def tag(line_item)
product_tags = line_item.variant.product.tags.map { |tag| tag.downcase.strip }
@selectors = @selectors.map { |selector| selector.downcase.strip }
(@selectors & product_tags).send(@comparator)
end
def type(line_item)
@selectors = @selectors.map { |selector| selector.downcase.strip }
(@match_type == :include) == @selectors.include?(line_item.variant.product.product_type.downcase.strip)
end
def vendor(line_item)
@selectors = @selectors.map { |selector| selector.downcase.strip }
(@match_type == :include) == @selectors.include?(line_item.variant.product.vendor.downcase.strip)
end
def product_id(line_item)
(@match_type == :include) == @selectors.include?(line_item.variant.product.id)
end
def variant_id(line_item)
(@match_type == :include) == @selectors.include?(line_item.variant.id)
end
def subscription(line_item)
!line_item.selling_plan_id.nil?
end
end
# ================================================================
# GatewayNameSelector
#
# Finds whether the supplied gateway name matches any of the
# entered names.
# ================================================================
class GatewayNameSelector
def initialize(match_type, gateway_names)
@comparator = match_type == :exact ? '==' : 'include?'
@gateway_names = gateway_names.map { |name| name.downcase.strip }
end
def match?(payment_gateway)
@gateway_names.any? { |name| payment_gateway.name.downcase.strip.send(@comparator, name) }
end
end
# ================================================================
# HideGatewayForProductCampaign
#
# If the cart contains any matching items, the entered gateway(s)
# are hidden.
# ================================================================
class HideGatewayForProductCampaign
def initialize(campaigns)
@campaigns = campaigns
end
def run(cart, payment_gateways)
@campaigns.each do |campaign|
product_selector = ProductSelector.new(
campaign[:product_selector_match_type],
campaign[:product_selector_type],
campaign[:product_selectors],
)
next unless cart.line_items.any? { |line_item| product_selector.match?(line_item) }
gateway_name_selector = GatewayNameSelector.new(
campaign[:gateway_match_type],
campaign[:gateway_names],
)
payment_gateways.delete_if do |payment_gateway|
gateway_name_selector.match?(payment_gateway)
end
end
end
end
CAMPAIGNS = [
HideGatewayForProductCampaign.new(HIDE_GATEWAY_FOR_PRODUCT),
]
CAMPAIGNS.each do |campaign|
campaign.run(Input.cart, Input.payment_gateways)
end
Output.payment_gateways = Input.payment_gatewaysPrikaz pristupnika za određene zemlje
Upotrijebite ovu skriptu za prikaz samo određenog pristupnika kada korisnik naručuje iz određene zemlje.
Na primjer, prikažite određeni pristupnik samo ako korisnik naručuje iz Kanade – pristupnik je skriven za adrese u bilo kojoj drugoj zemlji.
# ================================ Customizable Settings ================================
# ================================================================
# Show Gateway(s) for Country
#
# If the shipping address country matches any of the entered
# countries, the entered gateway(s) will be shown, and all others
# will be hidden. Otherwise, the entered gateway(s) will be hidden.
#
# - 'country_code_match_type' determines whether we look for the cart
# country to match the entered selectors or not. Can be:
# - ':include' to look for a country in the list
# - ':exclude' to make sure the country is not in the list
# - 'country_codes' is a list of 2-character abbreviations for
# the applicable countries
# - 'gateway_match_type' determines whether the below strings
# should be an exact or partial match. Can be:
# - ':exact' for an exact match
# - ':partial' for a partial match
# - 'gateway_names' is a list of strings to identify gateways
# ================================================================
SHOW_GATEWAYS_FOR_COUNTRY = [
{
country_code_match_type: :include,
country_codes: ["CA"],
gateway_match_type: :exact,
gateway_names: ["Gateway", "Other Gateway"],
},
]
# ================================ Script Code (do not edit) ================================
# ================================================================
# CountrySelector
#
# Finds whether the supplied country code matches the entered
# string.
# ================================================================
class CountrySelector
def initialize(match_type, countries)
@match_type = match_type
@countries = countries.map { |country| country.upcase.strip }
end
def match?(country_code)
(@match_type == :include) == @countries.include?(country_code.upcase.strip)
end
end
# ================================================================
# GatewayNameSelector
#
# Finds whether the supplied gateway name matches any of the
# entered names.
# ================================================================
class GatewayNameSelector
def initialize(match_type, gateway_names)
@comparator = match_type == :exact ? '==' : 'include?'
@gateway_names = gateway_names.map { |name| name.downcase.strip }
end
def match?(payment_gateway)
@gateway_names.any? { |name| payment_gateway.name.downcase.strip.send(@comparator, name) }
end
end
# ================================================================
# ShowGatewaysForCountryCampaign
#
# If the shipping address country matches any of the entered
# countries, the entered gateway(s) will be shown, and all others
# will be hidden. Otherwise, the entered gateway(s) will be hidden.
# ================================================================
class ShowGatewaysForCountryCampaign
def initialize(campaigns)
@campaigns = campaigns
end
def run(cart, payment_gateways)
address = cart.shipping_address
@campaigns.each do |campaign|
country_selector = CountrySelector.new(
campaign[:country_code_match_type],
campaign[:country_codes],
)
country_match = address.nil? ? false : country_selector.match?(address.country_code)
gateway_name_selector = GatewayNameSelector.new(
campaign[:gateway_match_type],
campaign[:gateway_names],
)
payment_gateways.delete_if do |payment_gateway|
gateway_name_selector.match?(payment_gateway) != country_match
end
end
end
end
CAMPAIGNS = [
ShowGatewaysForCountryCampaign.new(SHOW_GATEWAYS_FOR_COUNTRY),
]
CAMPAIGNS.each do |campaign|
campaign.run(Input.cart, Input.payment_gateways)
end
Output.payment_gateways = Input.payment_gatewaysSkrivanje pristupnika za određene zemlje
Upotrijebite ovu skriptu za skrivanje pristupnika za plaćanje u određenim zemljama.
Na primjer, sakrijte određeni pristupnik za korisnike u Kanadi.
# ================================ Customizable Settings ================================
# ================================================================
# Hide Gateway(s) for Country
#
# If the shipping address country matches any of the entered
# countries, the entered gateway(s) will be hidden.
#
# - 'country_code_match_type' determines whether we look for the cart
# country to match the entered selectors or not. Can be:
# - ':include' to look for a country in the list
# - ':exclude' to make sure the country is not in the list
# - 'country_codes' is a list of 2-character abbreviations for
# the applicable countries
# - 'gateway_match_type' determines whether the below strings
# should be an exact or partial match. Can be:
# - ':exact' for an exact match
# - ':partial' for a partial match
# - 'gateway_names' is a list of strings to identify gateways
# ================================================================
HIDE_GATEWAYS_FOR_COUNTRY = [
{
country_code_match_type: :include,
country_codes: ["CA"],
gateway_match_type: :exact,
gateway_names: ["Gateway", "Other Gateway"],
},
]
# ================================ Script Code (do not edit) ================================
# ================================================================
# CountrySelector
#
# Finds whether the supplied country code matches the entered
# string.
# ================================================================
class CountrySelector
def initialize(match_type, countries)
@match_type = match_type
@countries = countries.map { |country| country.upcase.strip }
end
def match?(country_code)
(@match_type == :include) == @countries.include?(country_code.upcase.strip)
end
end
# ================================================================
# GatewayNameSelector
#
# Finds whether the supplied gateway name matches any of the
# entered names.
# ================================================================
class GatewayNameSelector
def initialize(match_type, gateway_names)
@comparator = match_type == :exact ? '==' : 'include?'
@gateway_names = gateway_names.map { |name| name.downcase.strip }
end
def match?(payment_gateway)
@gateway_names.any? { |name| payment_gateway.name.downcase.strip.send(@comparator, name) }
end
end
# ================================================================
# HideGatewaysForCountryCampaign
#
# If the shipping address country matches any of the entered
# countries, the entered gateway(s) will be hidden.
# ================================================================
class HideGatewaysForCountryCampaign
def initialize(campaigns)
@campaigns = campaigns
end
def run(cart, payment_gateways)
address = cart.shipping_address
return if address.nil?
@campaigns.each do |campaign|
country_selector = CountrySelector.new(
campaign[:country_code_match_type],
campaign[:country_codes],
)
next unless country_selector.match?(address.country_code)
gateway_name_selector = GatewayNameSelector.new(
campaign[:gateway_match_type],
campaign[:gateway_names],
)
payment_gateways.delete_if do |payment_gateway|
gateway_name_selector.match?(payment_gateway)
end
end
end
end
CAMPAIGNS = [
HideGatewaysForCountryCampaign.new(HIDE_GATEWAYS_FOR_COUNTRY),
]
CAMPAIGNS.each do |campaign|
campaign.run(Input.cart, Input.payment_gateways)
end
Output.payment_gateways = Input.payment_gatewaysPrikaz pristupnika prema potrošnji
Upotrijebite ovu skriptu za prikaz određenog pristupnika ako korisnik potroši više od određenog iznosa.
Na primjer, prikažite određeni pristupnik ako korisnik potroši 1000 USD ili više, u suprotnom ga sakrijte.
# ================================ Customizable Settings ================================
# ================================================================
# Show Gateway(s) for Spend Threshold
#
# If the cart total is greater than, or equal to, the entered
# threshold, the entered gateway(s) are shown.
#
# - 'threshold' is the dollar amount the customer must spend in
# order to see the entered gateway(s)
# - 'gateway_match_type' determines whether the below strings
# should be an exact or partial match. Can be:
# - ':exact' for an exact match
# - ':partial' for a partial match
# - 'gateway_names' is a list of strings to identify gateways
# ================================================================
SHOW_GATEWAYS_FOR_THRESHOLD = [
{
threshold: 500,
gateway_match_type: :exact,
gateway_names: ["Gateway", "Other Gateway"],
},
]
# ================================ Script Code (do not edit) ================================
# ================================================================
# GatewayNameSelector
#
# Finds whether the supplied gateway name matches any of the
# entered names.
# ================================================================
class GatewayNameSelector
def initialize(match_type, gateway_names)
@comparator = match_type == :exact ? '==' : 'include?'
@gateway_names = gateway_names.map { |name| name.downcase.strip }
end
def match?(payment_gateway)
@gateway_names.any? { |name| payment_gateway.name.downcase.strip.send(@comparator, name) }
end
end
# ================================================================
# ShowGatewaysForThresholdCampaign
#
# If the cart total is greater than, or equal to, the entered
# threshold, the entered gateway(s) are shown.
# ================================================================
class ShowGatewaysForThresholdCampaign
def initialize(campaigns)
@campaigns = campaigns
end
def run(cart, payment_gateways)
@campaigns.each do |campaign|
next unless cart.subtotal_price < (Money.new(cents: 100) * campaign[:threshold])
gateway_name_selector = GatewayNameSelector.new(
campaign[:gateway_match_type],
campaign[:gateway_names],
)
payment_gateways.delete_if do |payment_gateway|
gateway_name_selector.match?(payment_gateway)
end
end
end
end
CAMPAIGNS = [
ShowGatewaysForThresholdCampaign.new(SHOW_GATEWAYS_FOR_THRESHOLD),
]
CAMPAIGNS.each do |campaign|
campaign.run(Input.cart, Input.payment_gateways)
end
Output.payment_gateways = Input.payment_gatewaysPromjena redoslijeda pristupnika
Upotrijebite ovu skriptu za promjenu zadanog redoslijeda pristupnika za plaćanje ponuđenih korisnicima.
# ================================ Customizable Settings ================================
# ================================================================
# Reorder Gateways
#
# The order in which you would like your gateways to display
# ================================================================
DESIRED_GATEWAY_ORDER = [
"Payment Gateway 1", "Payment Gateway 2", "Payment Gateway 3",
]
# ================================ Script Code (do not edit) ================================
# ================================================================
# ReorderGatewaysCampaign
#
# Reorders gateways into the entered order
# ================================================================
class ReorderGatewaysCampaign
def initialize(desired_order)
@desired_order = desired_order.map { |item| item.downcase.strip }
end
def run(cart, payment_gateways)
payment_gateways.sort_by! { |payment_gateway| @desired_order.index(payment_gateway.name.downcase.strip) || Float::INFINITY }
end
end
CAMPAIGNS = [
ReorderGatewaysCampaign.new(DESIRED_GATEWAY_ORDER),
]
CAMPAIGNS.each do |campaign|
campaign.run(Input.cart, Input.payment_gateways)
end
Output.payment_gateways = Input.payment_gateways