以 Namecheap 为例在未受支持的网站使用银联卡结算

目前,中国银联发行的信用卡在国际支付场景的可用性已经越来越高。特别是随着银联与 Stripe 开展合作,大量采用 Stripe 作为支付网关的海外网站就立刻自动地支持了使用银联卡进行结算。甚至,得益于银联与发现卡(Discover)的合作关系,即使是未受支付网关支持,银联卡也有机会通过发现卡通道成功结算。

问题

然而,目前仍有一部分网站出于不同原因,在其采用的支付网关已经能够使用银联卡结算的情况下,仍在其内置的卡信息检查中由于只识别其他卡组织(Visa、Mastercard等)而自行拒绝/限制银联卡。

解决

在上述情况下,若相关逻辑只存在于客户端,我们则可以通过技术手段将其跳过,直接与背后的支付网关沟通,从而成功使用银联卡结算。

不过,由于每个网站的构造不同,该方法的可行性以及所需的技术手段都可能存在差异。下面是我在 Namecheap 利用此方法使用银联卡结算的具体过程。

以 Namecheap 为例绕过限制的具体过程

  1. 首先,登录账户,并进入支付卡页面,然后点击「Add New Card」(添加新卡)按钮。

  2. 在添加卡页面中需要填写卡号等卡片信息。但是,当我们将银联卡号前四位填入文本框后,则会有下图「不支持卡组织」的提示。




    同样,尝试提交表单时也会由于此限制而无法继续。

  3. 那么,基本思路则是从客户端方面尝试移除该限制。Namecheap 是一个比较简单的例子,通过对「We accept…」这段文本使用浏览器开发者工具在网站脚本中进行搜索,则可以很容易地追踪到脚本中相关逻辑的位置。



  4. 有很多种方法能够实现对此处逻辑的修改,本文以使用 Safari 浏览器中的网页检查器工具为例,将含对应逻辑的 JavaScript 文件创建本地响应覆盖,以修改后的文件替代原先服务器上的文件进行载入。

    • 通过先前的步骤得知相关逻辑位于某资源服务器下的 main.js 文件,因此对其创建响应覆盖。

    • 编辑所创建的响应覆盖并选中「跳过网络」。



    • 检查该脚本文件,定位到上述逻辑位置位于 ncCheckCardPaymentType 函数中。阅读该代码,易知控制此逻辑的函数返回布尔值,因此,删除原代码并令其返回 true 以跳过相关检查。

      1
      2
      3
      4
      function ncCheckCardPaymentType(e, t) {
      // 删除原代码
      return true;
      }
  5. 刷新页面以载入覆盖后的网页脚本文件,填写表单并提交,成功添加卡。



    添加后卡组织图标显示为 Visa,推测可能是默认值。


    预授权冻结 1 美元后撤销。


    购买域名成功完成付款。后续自动续费应该也没有问题。

限制

Namecheap 并非首个我通过类似方法而成功使用银联卡结算的网站,然而,事实上也仍存在不少网站并不适用于此方法,尝试后无果。

总之,若要使此方法有效,大概需要满足以下条件:

  • 该网站所采用的支付网关支持银联卡,或能够使银联卡通过发现卡通道结算
  • 该网站的卡类型检查逻辑仅存在于客户端,或能够通过修改网络请求参数引导服务端发起支付请求


结论

对于支付网关支持银联卡结算,但存在客户端逻辑限制的网站,可以通过一些技术手段来绕过限制,从而使用银联卡进行结算。

netsage by qian