Παραδείγματα σεναρίων πληρωμής
Τα σενάρια πληρωμής αλληλεπιδρούν με τις πύλες πληρωμών και μπορούν να αλλάξουν τον τίτλο, την ορατότητα και τη θέση εμφάνισης μιας πύλης. Αυτά τα σενάρια εκτελούνται κάθε φορά που ο πελάτης σας αποκτά πρόσβαση στη σελίδα μεθόδου πληρωμής κατά την ολοκλήρωση της αγοράς. Τα σενάρια πληρωμής δεν αλληλεπιδρούν με τις γρήγορες ολοκληρώσεις αγοράς, επειδή οι γρήγορες ολοκληρώσεις αγοράς εμφανίζονται στους πελάτες σας προτού φτάσουν στη σελίδα ολοκλήρωσης αγοράς.
Για να χρησιμοποιήσετε τα πρότυπα αυτής της σελίδας, δημιουργήστε ένα νέο σενάριο με ένα κενό πρότυπο.
Βήματα:
Από τον Διαχειριστή Shopify, μεταβείτε στην ενότητα Εφαρμογές > Script Editor.
Κάντε κλικ στην επιλογή Δημιουργία σεναρίου.
Κάντε κλικ στην επιλογή Πύλες πληρωμών.
Επιλέξτε Κενό πρότυπο και, στη συνέχεια, κάντε κλικ στην επιλογή Δημιουργία σεναρίου.
Στην ενότητα Πηγαίος κώδικας Ruby, διαγράψτε την προεπιλεγμένη γραμμή κώδικα:
Output.cart = Input.cartΑντιγράψτε ένα σενάριο από αυτήν τη σελίδα και επικολλήστε το στην ενότητα Πηγαίος κώδικας Ruby.
Επεξεργαστείτε την ενότητα Προσαρμόσιμες ρυθμίσεις του σεναρίου για να λειτουργεί στο κατάστημά σας.
Δοκιμάστε το σενάριό σας. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Δοκιμή και εντοπισμός σφαλμάτων στα Shopify Scripts.
Μετά τη δοκιμή:
- κάντε κλικ στην επιλογή Αποθήκευση προσχεδίου για να αποθηκεύσετε ένα μη δημοσιευμένο προσχέδιο του σεναρίου, ή
- κάντε κλικ στην επιλογή Αποθήκευση και δημοσίευση για να δημιουργήσετε και να δημοσιεύσετε το σενάριο.
Σε αυτήν τη σελίδα
Εμφάνιση πυλών για συγκεκριμένους πελάτες
Χρησιμοποιήστε αυτό το σενάριο για να εμφανίσετε μόνο μια συγκεκριμένη επιλογή πύλης σε πελάτες με συγκεκριμένες ετικέτες.
Για παράδειγμα, εμφανίστε μόνο μια συγκεκριμένη πύλη σε πελάτες με την ετικέτα VIP - η πύλη αποκρύπτεται για οποιονδήποτε άλλο πελάτη.
# ================================ 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_gatewaysΑπόκρυψη πυλών για συγκεκριμένους πελάτες
Χρησιμοποιήστε αυτό το σενάριο για να αποκρύψετε μια συγκεκριμένη πύλη για πελάτες με συγκεκριμένες ετικέτες.
Για παράδειγμα, αποκρύψτε μια συγκεκριμένη πύλη για πελάτες με την ετικέτα 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_gatewaysΑπόκρυψη πυλών για συγκεκριμένα προϊόντα
Χρησιμοποιήστε αυτό το script για να αποκρύψετε μια συγκεκριμένη πύλη πληρωμών όταν προστίθενται συγκεκριμένα είδη στο καλάθι.
Για παράδειγμα, αποκρύψτε μια συγκεκριμένη πύλη πληρωμών αν ο πελάτης παραγγείλει ένα καπέλο.
# ================================ 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_gatewaysΕμφάνιση πυλών πληρωμών για συγκεκριμένες χώρες
Χρησιμοποιήστε αυτό το script για να εμφανίσετε μόνο μια συγκεκριμένη πύλη πληρωμών όταν ένας πελάτης παραγγέλνει από μια συγκεκριμένη χώρα.
Για παράδειγμα, εμφανίστε μόνο μια συγκεκριμένη πύλη πληρωμών εάν ένας πελάτης παραγγέλνει από τον Καναδά. Η πύλη πληρωμών αποκρύπτεται για διευθύνσεις σε οποιαδήποτε άλλη χώρα.
# ================================ 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_gatewaysΑπόκρυψη πυλών πληρωμών για συγκεκριμένες χώρες
Χρησιμοποιήστε αυτό το script για να αποκρύψετε πύλες πληρωμών σε συγκεκριμένες χώρες.
Για παράδειγμα, αποκρύψτε μια συγκεκριμένη πύλη πληρωμών από πελάτες στον Καναδά.
# ================================ 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_gatewaysΕμφάνιση πυλών πληρωμών βάσει ποσού δαπάνης
Χρησιμοποιήστε αυτό το script για να εμφανίσετε μια συγκεκριμένη πύλη πληρωμών εάν ένας πελάτης δαπανά πάνω από ένα συγκεκριμένο ποσό.
Για παράδειγμα, εμφανίστε μια συγκεκριμένη πύλη πληρωμών εάν ένας πελάτης δαπανά 1.000 $ ή περισσότερα, διαφορετικά αποκρύψτε την.
# ================================ 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_gatewaysΑναδιάταξη πυλών πληρωμών
Χρησιμοποιήστε αυτό το script για να αλλάξετε την προεπιλεγμένη σειρά των πυλών πληρωμών που προσφέρονται στους πελάτες σας.
# ================================ 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