Voorbeelden van betalingsscripts
Betalingsscripts hebben een interactie met betalingsgateways en kunnen de titel, zichtbaarheid en weergave van een gateway wijzigen. Deze scripts worden uitgevoerd wanneer je klant bij de checkout de pagina met verzendmethoden opent. Betalingsscripts hebben geen toegang tot versnelde checkouts , omdat versnelde checkouts worden weergegeven voor je klanten voordat ze de checkoutpagina bereiken.
Abonnementvereiste
Shopify-scripts en de Script Editor-app zijn alleen beschikbaar voor merchants met een Shopify Plus-abonnement. Je kunt de Script Editor-app niet langer downloaden in de Shopify App Store.
Op 28 augustus 2025 worden Shopify-scripts verwijderd en zullen ze niet meer werken. Migreer je bestaande scripts vóór deze datum naar Shopify Functions .
Maak een nieuw script met een leeg template om de templates op deze pagina te gebruiken.
Stappen:
Ga in het Shopify-beheercentrum naar Apps > Script Editor .
Klik op Script aanmaken .
Klik op Betalingsgateways .
Selecteer Leeg template en klik daarna op Script aanmaken .
Wis in het gedeelte Ruby-broncode de standaard coderegel. Output.cart = Input.cart
Kopieer een script van deze pagina en plak het in het gedeelte Ruby-broncode .
Bewerk het gedeelte Aanpasbare instellingen van het script zodat het in je winkel kan werken.
Test je script Raadpleeg voor meer informatie Shopify-scripts testen en debuggen .
Na het testen:
klik op Concept opslaan om een niet-gepubliceerd concept van het script op te slaan, of
klik op Save and publish om het script te maken en te publiceren
Gateways weergeven voor specifieke klanten Gebruik dit script om alleen een specifieke gateway-optie weer te geven voor specifiek getagde klanten.
Toon bijvoorbeeld alleen een bepaalde gateway aan klanten met de tag VIP
. De gateway is verborgen voor andere klanten.
# ================================ 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
Gateways verbergen voor specifieke klanten Gebruik dit script om een specifieke gateway voor specifiek getagde klanten te verbergen.
Verberg bijvoorbeeld een bepaalde gateway voor klanten met de tag 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
Gateways voor specifieke producten verbergen Gebruik dit script om een specifieke gateway te verbergen wanneer bepaalde artikelen aan de winkelwagen zijn toegevoegd.
Verberg bijvoorbeeld een bepaalde gateway als de klant een hoed bestelt.
# ================================ 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
Gateways weergeven voor specifieke landen Gebruik dit script om alleen een specifieke gateway weer te geven wanneer een klant uit een specifiek land bestelt.
Laat bijvoorbeeld alleen een bepaalde gateway zien als een klant een bestelling plaatst in Canada. De gateway is verborgen voor adressen in een ander land.
Opmerking
het gebruik van country
en country_code
is specifiek voor het equivalent van de regio, dus land/regio.
# ================================ 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
Gateways voor bepaalde landen verbergen Gebruik dit script om betalingsgateways in specifieke landen te verbergen.
Verberg bijvoorbeeld een bepaalde gateway van klanten in Canada.
Opmerking
het gebruik van country
en country_code
is specifiek voor het equivalent van de regio, dus land/regio.
# ================================ 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
Gateways weergeven via uitgeven Gebruik dit script om een specifieke gateway weer te geven als een klant meer dan een bepaald bedrag besteedt.
Als een klant bijvoorbeeld $ 1000 of meer uitgeeft, wordt een bepaalde gateway weergegeven, anders wordt deze verborgen.
# ================================ 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
Gateways opnieuw ordenen Gebruik dit script om de standaardvolgorde van de betalingsgateways die aan je klanten worden aangeboden te wijzigen.
# ================================ 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