Beispiele für Zahlungsskripte
Diese Seite wurde gedruckt um Sep 15, 2024. Die neueste Version findest du unter https://help.shopify.com/de/manual/checkout-settings/script-editor/examples/payment-gateway-scripts.
Zahlungs-Skripte interagieren mit Zahlungs-Gateways und können den Titel, die Sichtbarkeit und die Anzeigeposition eines Gateways ändern. Sie werden immer dann ausgeführt, wenn Ihr Kunde beim Checkout die Seite mit den Zahlungsmethoden aufruft. Zahlungs-Skripte interagieren nicht mit beschleunigten Checkouts , denn beschleunigte Checkouts werden Ihren Kunden angezeigt, bevor sie die Checkout-Seite erreichen.
Shopify Plus
Shopify Scripts und die Script Editor-App sind nur für Shopify Plus -Händler verfügbar. Die Script Editor App steht im Shopify App Store nicht mehr zum Download zur Verfügung.
Am 28. August 2025 wird Shopify Scripts entfernt und funktioniert dann nicht mehr. Migriere deine vorhandenen Scripts vor diesem Datum zu Shopify Functions .
Erstelle ein neues Skript mit einer leeren Vorlage, um die Vorlage auf dieser Seite zu verwenden.
Schritte:
Gehen Sie im Shopify-Adminbereich zu Apps > Script Editor .
Klicken Sie auf Skript erstellen .
Klicke auf Zahlungs-Gateways .
Wählen Sie Leere Vorlage aus und klicken Sie anschließend auf Skript erstellen .
Löschen Sie im Abschnitt Ruby-Quellcode die standardmäßige Codezeile: Output.cart = Input.cart
Kopiere ein Skript von dieser Seite und füge es in den Abschnitt Ruby-Quellcode ein.
Bearbeite den Abschnitt Anpassbare Einstellungen des Skriptes, damit es in deinem Shop funktioniert.
Teste dein Skript. Weitere Informationen findest du unter Shopify Scripts testen und Fehler beheben .
Nach dem Testen:
Klicken Sie auf Entwurf speichern , um einen unveröffentlichten Entwurf des Skriptes zu speichern, oder
klicke auf Speichern und veröffentlichen , um das Skript zu erstellen und zu veröffentlichen.
Gateways für bestimmte Kunden anzeigen Verwende dieses Skript, um speziell getaggten Kunden nur eine bestimmte Gateway-Option anzuzeigen.
Zeige z. B. Kunden mit dem VIP
-Tag nur ein bestimmtes Gateway an – für alle anderen Kunden wird das Gateway ausgeblendet.
# ================================ 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 für bestimmte Kunden ausblenden Verwende dieses Skript, um eine bestimmte Gateway-Option für speziell getaggte Kunden auszublenden.
Blende z. B. für Kunden mit dem HIDE_GATEWAY
-Tag ein bestimmtes Gateway aus.
# ================================ 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 für bestimmte Produkte ausblenden Verwende dieses Skript, um ein bestimmtes Gateway auszublenden, wenn bestimmte Artikel zum Warenkorb hinzugefügt werden.
Blende z. B. ein bestimmtes Gateway aus, wenn der Kunde einen Hut bestellt.
# ================================ 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 für ein bestimmtes Land anzeigen Verwende dieses Skript, um nur ein bestimmtes Gateway anzuzeigen, wenn ein Kunde in einem bestimmten Land bestellt.
Zeige z. B. nur ein bestimmtes Gateway an, wenn ein Kunde in Kanada bestellt – das Gateway wird für Adressen in einem anderen Land ausgeblendet.
Hinweis
Die Verwendung von country
und country_code
gilt für das Äquivalent der Region – d. h. das Land/die Region.
# ================================ 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 für ein bestimmtes Land ausblenden Verwende dieses Skript, um Zahlungs-Gateways in bestimmten Ländern auszublenden.
Blende z. B. ein bestimmtes Gateway für Kunden in Kanada aus.
Hinweis
Die Verwendung von country
und country_code
gilt für das Äquivalent der Region – d. h. das Land/die Region.
# ================================ 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
Portale nach Ausgaben anzeigen Verwende dieses Skript, um ein bestimmtes Portal anzuzeigen, wenn ein Kunde einen bestimmten Betrag ausgeben möchte.
Zeige z. B. ein bestimmtes Gateway an, wenn ein Kunde 1.000 USD oder mehr ausgibt, und blende es andernfalls aus.
# ================================ 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 neu anordnen Verwende dieses Skript, um die Standardreihenfolge der Zahlungs-Gateways, die deinen Kunden angeboten werden, zu ändern.
# ================================ 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