目前,中国银联发行的信用卡在国际支付场景的可用性已经越来越高。特别是随着银联与 Stripe 开展合作,大量采用 Stripe 作为支付网关的海外网站就立刻自动地支持了使用银联卡进行结算。甚至,得益于银联与发现卡(Discover)的合作关系,即使是未受支付网关支持,银联卡也有机会通过发现卡通道成功结算。
问题
然而,目前仍有一部分网站出于不同原因,在其采用的支付网关已经能够使用银联卡结算的情况下,仍在其内置的卡信息检查中由于只识别其他卡组织(Visa、Mastercard等)而自行拒绝/限制银联卡。
解决
在上述情况下,若相关逻辑只存在于客户端,我们则可以通过技术手段将其跳过,直接与背后的支付网关沟通,从而成功使用银联卡结算。
不过,由于每个网站的构造不同,该方法的可行性以及所需的技术手段都可能存在差异。下面是我在 Namecheap 利用此方法使用银联卡结算的具体过程。
以 Namecheap 为例绕过限制的具体过程
首先,登录账户,并进入支付卡页面,然后点击「Add New Card」(添加新卡)按钮。
在添加卡页面中需要填写卡号等卡片信息。但是,当我们将银联卡号前四位填入文本框后,则会有下图「不支持卡组织」的提示。

同样,尝试提交表单时也会由于此限制而无法继续。那么,基本思路则是从客户端方面尝试移除该限制。Namecheap 是一个比较简单的例子,通过对「We accept…」这段文本使用浏览器开发者工具在网站脚本中进行搜索,则可以很容易地追踪到脚本中相关逻辑的位置。
有很多种方法能够实现对此处逻辑的修改,本文以使用 Safari 浏览器中的网页检查器工具为例,将含对应逻辑的 JavaScript 文件创建本地响应覆盖,以修改后的文件替代原先服务器上的文件进行载入。
通过先前的步骤得知相关逻辑位于某资源服务器下的
main.js文件,因此对其创建响应覆盖。
编辑所创建的响应覆盖并选中「跳过网络」。

检查该脚本文件,定位到上述逻辑位置位于
ncCheckCardPaymentType函数中。阅读该代码,易知控制此逻辑的函数返回布尔值,因此,删除原代码并令其返回true以跳过相关检查。1
2
3
4function ncCheckCardPaymentType(e, t) {
// 删除原代码
return true;
}
刷新页面以载入覆盖后的网页脚本文件,填写表单并提交,成功添加卡。

添加后卡组织图标显示为 Visa,推测可能是默认值。
预授权冻结 1 美元后撤销。
购买域名成功完成付款。后续自动续费应该也没有问题。
限制
Namecheap 并非首个我通过类似方法而成功使用银联卡结算的网站,然而,事实上也仍存在不少网站并不适用于此方法,尝试后无果。
总之,若要使此方法有效,大概需要满足以下条件:
- 该网站所采用的支付网关支持银联卡,或能够使银联卡通过发现卡通道结算
- 该网站的卡类型检查逻辑仅存在于客户端,或能够通过修改网络请求参数引导服务端发起支付请求
结论
对于支付网关支持银联卡结算,但存在客户端逻辑限制的网站,可以通过一些技术手段来绕过限制,从而使用银联卡进行结算。