支付脚本示例
此页印于2023年4月22日。有关当前版本,请访问https://help.shopify.com/en/manual/checkout-settings/script-editor/examples/payment-gateway-scripts。
支付脚本与支付网关交互,并且可以更改网关的标题、可见性和显示位置。每次客户在结帐时访问支付方式页面时,这些脚本都会运行。支付脚本不会与加速签出,因为加速结帐在客户到达结帐页面之前就会显示给他们。
要使用此页面上的模板,请使用空白模板创建一个新脚本。
步骤:
- 从您的Shopify管理,到应用程序>脚本编辑器.
- 点击创建脚本.
- 点击支付网关.
- 选择空白模板,然后点击创建脚本.
- 在Ruby源代码节,删除默认的代码行:
输出。车=输入.车
- 从此页复制一个脚本并将其粘贴到Ruby源代码部分。
- 编辑可定制的设置部分,以便在您的商店中发挥作用。
- 测试你的脚本。更多信息请参考测试和调试Shopify脚本.
- 后测试:
- 点击保存草稿保存未发表的脚本草稿,或者
- 点击保存并发布创建并发布脚本。
显示特定客户的网关
使用此脚本仅向特定标记的客户显示特定的网关选项。
例如,只向客户显示特定的网关贵宾
标签-网关对任何其他客户都是隐藏的。
# ================================ 可定制的设置 ================================# ================================================================#显示客户标签的网关#如果我们有一个匹配的客户,输入的网关将是#显示,其他所有将被隐藏。否则,输入的# gateway将被隐藏。## - 'customer_tag_match_type'决定是否查找客户#是否被任何输入的标签所标记。可以是:# - ':include'检查客户是否被标记# - ':exclude'确保客户没有被标记# - 'customer_tags'是一个客户标签列表#活动# - 'gateway_match_type'决定以下字符串是否匹配#应该是完全匹配或部分匹配。可以是:# - ':exact'表示精确匹配# - ':partial'表示部分匹配'gateway_names'是一个字符串列表,用于标识网关# ================================================================SHOW_GATEWAYS_FOR_CUSTOMER_TAG=({customer_tag_match_type:包括,customer_tags:(“customer_tag”,“another_tag”],gateway_match_type:精确,gateway_names:(“网关”,“其他网关”],},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# CustomerTagSelector#查找所提供的客户是否有任何输入的标签。# ================================================================类CustomerTagSelectordef初始化(match_type,标签)@comparator=match_type==:包括?“什么?”:“没有吗?”@ tags=标签.地图{|标签|标签.downcase.带}结束def比赛吗?(客户)customer_tags=客户.标签.地图{|标签|标签.downcase.带}(@ tags&customer_tags).发送(@comparator)结束结束# ================================================================# GatewayNameSelector#查找所提供的网关名是否匹配#输入的名称。# ================================================================类GatewayNameSelectordef初始化(match_type,gateway_names)@comparator=match_type==:确切?“= =”:“有吗?”@gateway_names=gateway_names.地图{|名字|名字.downcase.带}结束def比赛吗?(payment_gateway)@gateway_names.任何?{|名字|payment_gateway.名字.downcase.带.发送(@comparator,名字)}结束结束# ================================================================# ShowGatewaysForCustomerTagCampaign#如果客户有任何输入的标签,则输入的网关#根据输入的设置显示/隐藏# ================================================================类ShowGatewaysForCustomerTagCampaigndef初始化(活动)@campaigns=活动结束def运行(车,payment_gateways)@campaigns.每一个做|运动|customer_tag_selector=CustomerTagSelector.新(运动(: customer_tag_match_type],运动(: customer_tags],)customer_match=车.客户.nil ??假:customer_tag_selector.比赛吗?(车.客户)gateway_name_selector=GatewayNameSelector.新(运动(: gateway_match_type],运动(: gateway_names],)payment_gateways.delete_if做|payment_gateway|gateway_name_selector.比赛吗?(payment_gateway)! =customer_match结束结束结束结束活动=(ShowGatewaysForCustomerTagCampaign.新(SHOW_GATEWAYS_FOR_CUSTOMER_TAG),]活动.每一个做|运动|运动.运行(输入.车,输入.payment_gateways)结束输出.payment_gateways=输入.payment_gateways
隐藏特定客户的网关
使用此脚本为特定标记的客户隐藏特定网关。
例如,为客户隐藏特定网关HIDE_GATEWAY
标签。
# ================================ 可定制的设置 ================================# ================================================================#为客户标签隐藏网关#如果我们有一个匹配的客户,输入的网关将是#隐藏。## - 'customer_tag_match_type'决定是否查找客户#是否被任何输入的标签所标记。可以是:# - ':include'检查客户是否被标记# - ':exclude'确保客户没有被标记# - 'customer_tags'是一个客户标签列表#活动# - 'gateway_match_type'决定以下字符串是否匹配#应该是完全匹配或部分匹配。可以是:# - ':exact'表示精确匹配# - ':partial'表示部分匹配'gateway_names'是一个字符串列表,用于标识网关# ================================================================HIDE_GATEWAYS_FOR_CUSTOMER_TAG=({customer_tag_match_type:包括,customer_tags:(“customer_tag”,“another_tag”],gateway_match_type:精确,gateway_names:(“网关”,“其他网关”],},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# CustomerTagSelector#查找所提供的客户是否有任何输入的标签。# ================================================================类CustomerTagSelectordef初始化(match_type,标签)@comparator=match_type==:包括?“什么?”:“没有吗?”@ tags=标签.地图{|标签|标签.downcase.带}结束def比赛吗?(客户)customer_tags=客户.标签.地图{|标签|标签.downcase.带}(@ tags&customer_tags).发送(@comparator)结束结束# ================================================================# GatewayNameSelector#查找所提供的网关名是否匹配#输入的名称。# ================================================================类GatewayNameSelectordef初始化(match_type,gateway_names)@comparator=match_type==:确切?“= =”:“有吗?”@gateway_names=gateway_names.地图{|名字|名字.downcase.带}结束def比赛吗?(payment_gateway)@gateway_names.任何?{|名字|payment_gateway.名字.downcase.带.发送(@comparator,名字)}结束结束# ================================================================# HideGatewaysForCustomerTagCampaign#如果我们有一个匹配的客户,输入的网关将是#隐藏。# ================================================================类HideGatewaysForCustomerTagCampaigndef初始化(活动)@campaigns=活动结束def运行(车,payment_gateways)返回如果车.客户.nil ?@campaigns.每一个做|运动|customer_tag_selector=CustomerTagSelector.新(运动(: customer_tag_match_type],运动(: customer_tags],)下一个除非customer_tag_selector.比赛吗?(车.客户)gateway_name_selector=GatewayNameSelector.新(运动(: gateway_match_type],运动(: gateway_names],)payment_gateways.delete_if做|payment_gateway|gateway_name_selector.比赛吗?(payment_gateway)结束结束结束结束活动=(HideGatewaysForCustomerTagCampaign.新(HIDE_GATEWAYS_FOR_CUSTOMER_TAG),]活动.每一个做|运动|运动.运行(输入.车,输入.payment_gateways)结束输出.payment_gateways=输入.payment_gateways
隐藏特定产品的网关
当特定的商品被添加到购物车中时,使用这个脚本隐藏特定的网关。
例如,如果客户订购一顶帽子,则隐藏特定的网关。
# ================================ 可定制的设置 ================================# ================================================================#隐藏产品网关#如果购物车中包含任何匹配的商品,则输入的网关#是隐藏的。## - 'product_selector_match_type'决定我们是否寻找与输入的选择器匹配或不匹配的产品。可以号是:# - ':include'检查产品是否匹配# - ':exclude'确保产品不匹配# - 'product_selector_type'决定产品如何符合条件将标识为#。可以是:# - ':tag'按标签查找产品# - ':type'按类型查找产品# - ':vendor'按供应商查找产品# - ':product_id'按ID查找产品# - ':variant_id'通过变体ID查找产品# - ':subscription'查找订阅产品# - 'product_selectors'是一个字符串或数字列表#根据上述选择器类型识别产品# - 'gateway_match_type'决定以下字符串是否匹配#应该是完全匹配或部分匹配。可以是:# - ':exact'表示精确匹配# - ':partial'表示部分匹配'gateway_names'是一个字符串列表,用于标识网关# ================================================================HIDE_GATEWAY_FOR_PRODUCT=({product_selector_match_type:包括,product_selector_type: product_id,product_selectors:(1234567890987,1234567890986],gateway_match_type:精确,gateway_names:(“网关”,“其他网关”],},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# ProductSelector##根据输入的条件查找匹配的产品。# ================================================================类ProductSelectordef初始化(match_type,selector_type,选择器)@match_type=match_type@comparator=match_type==:包括?“什么?”:“没有吗?”@selector_type=selector_type@ selector=选择器结束def比赛吗?(line_item)如果自我.respond_to吗?(@selector_type)自我.发送(@selector_type,line_item)其他的提高RuntimeError.新(“无效的产品选择器类型”)结束结束def标签(line_item)product_tags=line_item.变体.产品.标签.地图{|标签|标签.downcase.带}@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@ selector&product_tags).发送(@comparator)结束def类型(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type==:包括)==@ selector.包括什么?(line_item.变体.产品.product_type.downcase.带)结束def供应商(line_item)@ selector=@ selector.地图{|选择器|选择器.downcase.带}(@match_type==:包括)==@ selector.包括什么?(line_item.变体.产品.供应商.downcase.带)结束defproduct_id(line_item)(@match_type==:包括)==@ selector.包括什么?(line_item.变体.产品.id)结束defvariant_id(line_item)(@match_type==:包括)==@ selector.包括什么?(line_item.变体.id)结束def订阅(line_item)!line_item.selling_plan_id.nil ?结束结束# ================================================================# GatewayNameSelector#查找所提供的网关名是否匹配#输入的名称。# ================================================================类GatewayNameSelectordef初始化(match_type,gateway_names)@comparator=match_type==:确切?“= =”:“有吗?”@gateway_names=gateway_names.地图{|名字|名字.downcase.带}结束def比赛吗?(payment_gateway)@gateway_names.任何?{|名字|payment_gateway.名字.downcase.带.发送(@comparator,名字)}结束结束# ================================================================# HideGatewayForProductCampaign#如果购物车中包含任何匹配的商品,则输入的网关#是隐藏的。# ================================================================类HideGatewayForProductCampaigndef初始化(活动)@campaigns=活动结束def运行(车,payment_gateways)@campaigns.每一个做|运动|product_selector=ProductSelector.新(运动(: product_selector_match_type],运动(: product_selector_type],运动(: product_selectors],)下一个除非车.line_items.任何?{|line_item|product_selector.比赛吗?(line_item)}gateway_name_selector=GatewayNameSelector.新(运动(: gateway_match_type],运动(: gateway_names],)payment_gateways.delete_if做|payment_gateway|gateway_name_selector.比赛吗?(payment_gateway)结束结束结束结束活动=(HideGatewayForProductCampaign.新(HIDE_GATEWAY_FOR_PRODUCT),]活动.每一个做|运动|运动.运行(输入.车,输入.payment_gateways)结束输出.payment_gateways=输入.payment_gateways
显示特定国家的网关
当客户从特定国家订购时,使用此脚本仅显示特定网关。
例如,如果客户从加拿大订购,则只显示特定的网关—对于任何其他国家的地址,则隐藏网关。
# ================================ 可定制的设置 ================================# ================================================================显示国家/地区的网关##如果收货地址国家匹配任何输入的# countries,将显示输入的网关,以及所有其他网关#将被隐藏。否则,输入的网关将被隐藏。## - 'country_code_match_type'决定是否查找购物车# country是否匹配输入的选择器。可以是:# -“:include”在列表中查找国家# - ':exclude'确保该国家不在列表中# - 'country_codes'是一个2个字符的缩写列表#适用国家# - 'gateway_match_type'决定以下字符串是否匹配#应该是完全匹配或部分匹配。可以是:# - ':exact'表示精确匹配# - ':partial'表示部分匹配'gateway_names'是一个字符串列表,用于标识网关# ================================================================SHOW_GATEWAYS_FOR_COUNTRY=({country_code_match_type:包括,country_code:(“CA”],gateway_match_type:精确,gateway_names:(“网关”,“其他网关”],},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# CountrySelector#查找提供的国家/地区代码是否与输入的代码匹配#字符串。# ================================================================类CountrySelectordef初始化(match_type,国家)@match_type=match_type@countries=国家.地图{|国家|国家.upcase.带}结束def比赛吗?(country_code)(@match_type==:包括)==@countries.包括什么?(country_code.upcase.带)结束结束# ================================================================# GatewayNameSelector#查找所提供的网关名是否匹配#输入的名称。# ================================================================类GatewayNameSelectordef初始化(match_type,gateway_names)@comparator=match_type==:确切?“= =”:“有吗?”@gateway_names=gateway_names.地图{|名字|名字.downcase.带}结束def比赛吗?(payment_gateway)@gateway_names.任何?{|名字|payment_gateway.名字.downcase.带.发送(@comparator,名字)}结束结束# ================================================================# ShowGatewaysForCountryCampaign##如果收货地址国家匹配任何输入的# countries,将显示输入的网关,以及所有其他网关#将被隐藏。否则,输入的网关将被隐藏。# ================================================================类ShowGatewaysForCountryCampaigndef初始化(活动)@campaigns=活动结束def运行(车,payment_gateways)地址=车.shipping_address@campaigns.每一个做|运动|country_selector=CountrySelector.新(运动(: country_code_match_type],运动(: country_code],)country_match=地址.nil ??假:country_selector.比赛吗?(地址.country_code)gateway_name_selector=GatewayNameSelector.新(运动(: gateway_match_type],运动(: gateway_names],)payment_gateways.delete_if做|payment_gateway|gateway_name_selector.比赛吗?(payment_gateway)! =country_match结束结束结束结束活动=(ShowGatewaysForCountryCampaign.新(SHOW_GATEWAYS_FOR_COUNTRY),]活动.每一个做|运动|运动.运行(输入.车,输入.payment_gateways)结束输出.payment_gateways=输入.payment_gateways
隐藏特定国家的网关
使用此脚本隐藏特定国家的支付网关。
例如,对加拿大的客户隐藏一个特定的网关。
# ================================ 可定制的设置 ================================# ================================================================#隐藏国家的网关##如果收货地址国家匹配任何输入的# countries,输入的网关将被隐藏。## - 'country_code_match_type'决定是否查找购物车# country是否匹配输入的选择器。可以是:# -“:include”在列表中查找国家# - ':exclude'确保该国家不在列表中# - 'country_codes'是一个2个字符的缩写列表#适用国家# - 'gateway_match_type'决定以下字符串是否匹配#应该是完全匹配或部分匹配。可以是:# - ':exact'表示精确匹配# - ':partial'表示部分匹配'gateway_names'是一个字符串列表,用于标识网关# ================================================================HIDE_GATEWAYS_FOR_COUNTRY=({country_code_match_type:包括,country_code:(“CA”],gateway_match_type:精确,gateway_names:(“网关”,“其他网关”],},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# CountrySelector#查找提供的国家/地区代码是否与输入的代码匹配#字符串。# ================================================================类CountrySelectordef初始化(match_type,国家)@match_type=match_type@countries=国家.地图{|国家|国家.upcase.带}结束def比赛吗?(country_code)(@match_type==:包括)==@countries.包括什么?(country_code.upcase.带)结束结束# ================================================================# GatewayNameSelector#查找所提供的网关名是否匹配#输入的名称。# ================================================================类GatewayNameSelectordef初始化(match_type,gateway_names)@comparator=match_type==:确切?“= =”:“有吗?”@gateway_names=gateway_names.地图{|名字|名字.downcase.带}结束def比赛吗?(payment_gateway)@gateway_names.任何?{|名字|payment_gateway.名字.downcase.带.发送(@comparator,名字)}结束结束# ================================================================# HideGatewaysForCountryCampaign##如果收货地址国家匹配任何输入的# countries,输入的网关将被隐藏。# ================================================================类HideGatewaysForCountryCampaigndef初始化(活动)@campaigns=活动结束def运行(车,payment_gateways)地址=车.shipping_address返回如果地址.nil ?@campaigns.每一个做|运动|country_selector=CountrySelector.新(运动(: country_code_match_type],运动(: country_code],)下一个除非country_selector.比赛吗?(地址.country_code)gateway_name_selector=GatewayNameSelector.新(运动(: gateway_match_type],运动(: gateway_names],)payment_gateways.delete_if做|payment_gateway|gateway_name_selector.比赛吗?(payment_gateway)结束结束结束结束活动=(HideGatewaysForCountryCampaign.新(HIDE_GATEWAYS_FOR_COUNTRY),]活动.每一个做|运动|运动.运行(输入.车,输入.payment_gateways)结束输出.payment_gateways=输入.payment_gateways
按支出显示网关
如果客户花费超过一定金额,使用此脚本显示一个特定的网关。
例如,如果客户花费1000美元或更多,则显示特定的网关,否则隐藏它。
# ================================ 可定制的设置 ================================# ================================================================#显示花费阈值的网关##如果购物车总数大于或等于输入的# threshold,显示输入的网关。## -“threshold”是客户必须消费的金额# order查看输入的网关# - 'gateway_match_type'决定以下字符串是否匹配#应该是完全匹配或部分匹配。可以是:# - ':exact'表示精确匹配# - ':partial'表示部分匹配'gateway_names'是一个字符串列表,用于标识网关# ================================================================SHOW_GATEWAYS_FOR_THRESHOLD=({阈值:500,gateway_match_type:精确,gateway_names:(“网关”,“其他网关”],},]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# GatewayNameSelector#查找所提供的网关名是否匹配#输入的名称。# ================================================================类GatewayNameSelectordef初始化(match_type,gateway_names)@comparator=match_type==:确切?“= =”:“有吗?”@gateway_names=gateway_names.地图{|名字|名字.downcase.带}结束def比赛吗?(payment_gateway)@gateway_names.任何?{|名字|payment_gateway.名字.downcase.带.发送(@comparator,名字)}结束结束# ================================================================# ShowGatewaysForThresholdCampaign##如果购物车总数大于或等于输入的# threshold,显示输入的网关。# ================================================================类ShowGatewaysForThresholdCampaigndef初始化(活动)@campaigns=活动结束def运行(车,payment_gateways)@campaigns.每一个做|运动|下一个除非车.subtotal_price<(钱.新(分:One hundred.)*运动(:阈值])gateway_name_selector=GatewayNameSelector.新(运动(: gateway_match_type],运动(: gateway_names],)payment_gateways.delete_if做|payment_gateway|gateway_name_selector.比赛吗?(payment_gateway)结束结束结束结束活动=(ShowGatewaysForThresholdCampaign.新(SHOW_GATEWAYS_FOR_THRESHOLD),]活动.每一个做|运动|运动.运行(输入.车,输入.payment_gateways)结束输出.payment_gateways=输入.payment_gateways
重新排序网关
使用此脚本更改提供给客户的支付网关的默认顺序。
# ================================ 可定制的设置 ================================# ================================================================#重新排序网关##您希望网关显示的顺序# ================================================================DESIRED_GATEWAY_ORDER=(“支付网关1”,“支付网关2”,“支付网关3”,]# ================================ 脚本代码(不要编辑 ) ================================# ================================================================# ReorderGatewaysCampaign#将网关重新排序到输入的顺序中# ================================================================类ReorderGatewaysCampaigndef初始化(desired_order)@desired_order=desired_order.地图{|项|项.downcase.带}结束def运行(车,payment_gateways)payment_gateways.sort_by !{|payment_gateway|@desired_order.指数(payment_gateway.名字.downcase.带)||浮动::∞}结束结束活动=(ReorderGatewaysCampaign.新(DESIRED_GATEWAY_ORDER),]活动.每一个做|运动|运动.运行(输入.车,输入.payment_gateways)结束输出.payment_gateways=输入.payment_gateways