Przykłady skryptów płatności
Ta strona została wydrukowana dnia Apr 25, 2024. Aby zapoznać się z aktualną wersją, odwiedź https://help.shopify.com/pl/manual/checkout-settings/script-editor/examples/payment-gateway-scripts.
Skrypty płatności współdziałają z bramkami płatniczymi i mogą zmieniać nazwy bramek płatniczych, ich widoczność oraz kolejność ich wyświetlania. Są uruchamiane zawsze, gdy klient wchodzi na stronę metody płatności podczas realizacji zakupu. Skrypty płatności nie działają z przyspieszoną realizacją zakupu , ponieważ opcja ta jest wyświetlana klientom, zanim przejdą do strony realizacji zakupu.
Shopify Plus
Aplikacje Shopify Scripts i Script Editor są dostępne tylko dla sprzedawców Shopify Plus . Aplikacja Script Editor nie jest już dostępna do pobrania z Shopify App Store.
W dniu 28 sierpnia 2025 roku Shopify Scripts zostaną wycofane i przestaną działać.Przenieś istniejące skrypty do Shopify Functions przed tym dniem.
Aby używać tych szablonów na tej stronie, utwórz nowy skrypt z pustym szablonem.
Kroki:
Z poziomu panelu administracyjnego Shopify przejdź do opcji Aplikacje > Script Editor .
Kliknij opcję Utwórz skrypt .
Kliknij Bramki płatnicze .
Wybierz opcję Pusty szablon , a następnie kliknij Utwórz skrypt .
W sekcji Kod źródłowy Ruby usuń domyślną linię kodu: Output.cart = Input.cart
Skopiuj skrypt z tej strony i wklej go w sekcji Kod źródłowy Ruby .
Edytuj sekcję Ustawienia konfigurowalne skryptu, aby działała w Twoim sklepie.
Przetestuj swój skrypt. Aby uzyskać więcej informacji, zapoznaj się z sekcją Testowanie i debugowanie skryptów Shopify Scripts .
Po przetestowaniu:
kliknij opcję Zapisz wersję roboczą , aby zapisać nieopublikowaną wersję roboczą skryptu, lub
kliknij opcję Zapisz i opublikuj , aby utworzyć i opublikować skrypt.
Pokaż bramki określonym klientom Użyj tego skryptu, aby wyświetlić specjalnie oznaczonym klientom tylko określoną opcję bramki.
Pokaż np. określoną bramkę klientom z tagiem VIP
- bramka jest ukryta dla każdego innego klienta.
# ================================ 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
Ukryj bramki dla określonych klientów Użyj tego skryptu, aby ukryć określoną bramkę w przypadku specjalnie oznaczonych klientów.
Ukryj np. konkretną bramkę w przypadku klientów z tagiem 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
Ukryj bramki dla określonych produktów Użyj tego skryptu, aby ukryć określoną bramkę, gdy do koszyka zostaną dodane określone pozycje.
Ukryj np. konkretną bramkę, jeśli klient zamówi kapelusz.
# ================================ 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
Pokaż bramki dla określonych krajów Użyj tego skryptu, aby wyświetlić tylko określoną bramkę, gdy klient zamawia z określonego kraju.
Pokaż np. określoną bramkę, jeśli klient zamawia z Kanady - bramka jest ukryta dla adresów w jakimkolwiek innym kraju.
# ================================ 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
Ukryj bramki dla określonych krajów Użyj tego skryptu, aby ukryć bramki płatnicze w określonych krajach.
Ukryj np. określoną bramkę w przypadku klientów w Kanadzie.
# ================================ 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
Pokaż bramki według wydatków Użyj tego skryptu, aby wyświetlić konkretną bramkę, jeśli wartość wydatków klienta przekracza określoną kwotę.
Na przykład, pokaż okreśoną bramkę, jeśli klient wyda co najmniej 1000 PLN; w przeciwnym razie ukryj ją.
# ================================ 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
Zmień kolejność bramek Użyj tego skryptu, aby zmienić domyślną kolejność bramek płatniczych oferowanych klientom.
# ================================ 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