Script di pagamento di esempio
Questa pagina è stata stampata il Oct 26, 2023. Per la versione aggiornata, visita https://help.shopify.com/it/manual/checkout-settings/script-editor/examples/payment-gateway-scripts.
Gli script di pagamento interagiscono con i canali di pagamento e possono modificare il titolo di un canale, la visibilità e la posizione di visualizzazione. Tali script vengono eseguiti ogni volta che il cliente accede alla pagina dei metodi di pagamento al check-out. Gli script di pagamento non interagiscono con icheck-out veloci poiché tali check-out sono mostrati ai clienti prima che raggiungano la pagina di check-out.
Shopify Plus
gli script Shopify e l'app Script Editor sono disponibili solo per i merchantShopify Plus . L'app Script Editor non è più disponibile per il download da Shopify App Store.
Il 28 agosto 2025, Shopify Scripts verrà rimosso e non funzionerà più. Migra gli script esistenti suShopify Functions prima di questa data.
Per utilizzare i modelli su questa pagina, crea un nuovo script con un modello vuoto.
箴cedura:
Dal pannello di controllo Shopify vai suApp >Script Editor .
Clicca suCrea script .
Clicca suCanali di pagamento .
SelezionaModello vuoto e clicca suCrea script .
Nella sezioneCodice sorgente di Ruby , elimina la riga di codice predefinita:Output.cart = Input.cart
Copia uno script da questa pagina e incollalo nella sezioneCodice sorgente di Ruby .
Modifica la sezioneImpostazioni personalizzabili dello script affinché funzioni nel negozio.
Testa lo script. Per maggiori informazioni, consulta la sezioneEsecuzione di test e debug degli script Shopify .
Dopo il test:
Clicca suSalva bozza per salvare una bozza non pubblicata dello script oppure
Clicca suSalva e pubblica per creare e pubblicare lo script.
Mostra canali per clienti specifici
Utilizza questo script per mostrare solo un'opzione di canale specifica ai clienti contrassegnati con un tag specifico.
Ad esempio, mostra solo un canale specifico ai clienti contrassegnati con il tagVIP
; il canale è nascosto per tutti gli altri clienti.
# ================================ 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
Nascondi canali per paesi specifici
Utilizza questo script per nascondere un canale specifico ai clienti contrassegnati con un tag specifico.
Ad esempio, nascondi un particolare canale ai clienti contrassegnati con il tagHIDE_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 ) 返回 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
Nascondi i canali per prodotti specifici
Utilizza questo script per nascondere un canale specifico quando vengono aggiunti articoli specifici al carrello.
Ad esempio, nascondi un particolare canale se il cliente ordina un cappello.
# ================================ 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 #——“:订阅订阅连续cts # - '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 箴ductSelector 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 = 箴ductSelector . 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
Mostra canali per paesi specifici
Utilizza questo script per mostrare solo un canale specifico quando un cliente effettua un ordine da un paese specifico.
Ad esempio, mostra solo un particolare canale se un cliente effettua un ordine dal Canada; il canale è nascosto per gli indirizzi di qualsiasi altro paese.
Nota
L'utilizzo dicountry
ecountry_code
è specifico per l'equivalente della regione, cioè paese/regione.
# ================================ 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
Nascondi canali per paesi specifici
Utilizza questo script per nascondere i canali di pagamento in paesi specifici.
Ad esempio, nascondi un canale specifico per clienti in Canada.
Nota
L'utilizzo dicountry
ecountry_code
è specifico per l'equivalente della regione, cioè paese/regione.
# ================================ 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 返回 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
Mostra canali in base alla spesa
Utilizza questo script per mostrare un canale specifico se un cliente spende più di un certo importo.
Ad esempio, mostra un canale specifico se un cliente spende 1000 $ o più, altrimenti nascondilo.
# ================================ 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
Riordina i canali
Utilizza questo script per modificare l'ordine predefinito dei canali di pagamento offerti ai tuoi clienti.
# ================================ 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 # #重整网关输入订单 # ================================================================ 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