如今扫码支付已经成为了普及率最高的支付方式之一,大大小小的超市,餐厅,甚至路边的小吃摊都支持扫码支付。微信支付、支付宝、京东钱包、百度钱包、财付通、银联钱包等等,很多收款人为了方便,把这些二维码都打印出来贴到一起,但是用户支付起来就麻烦了,很多时候扫码框经常扫到别的支付二维码,于是我们经常会遇到下面的错误。

微信扫支付宝二维码得到的结果:https://qr.alipay.com/fkx07118ob9rxtnbfjfsub9

支付宝扫微信二维码得到的结果:wxp://f2f0sn8crswlZdwEsSH8N4JulMsjze3Ghnqi

所以就有人想出了这样的办法:把这些二维码都聚合到一起,生成一个统一的二维码,不论用户使用哪一种支付方式扫码都能付款。听起来很不错,问题似乎完美的解决了。不过这背后的实现方式我们应该了解一下。少数派这里就有篇文章介绍了一个生成聚合收款二维码的服务:一张二维码搞定微信、QQ、支付宝的付款!

聚合二维收款码是怎样生成的?

以微信和支付宝为例,我们用微信直接去扫支付宝二维码、或者支付宝去扫微信二维码,会遇到上面的错误,是因为微信和支付宝只能认识自家的链接,二维码的本质就是一段字符串。而聚合付款码的作用就是用一个统一的链接来替代这些支付方式,如果我们用支付宝去扫聚合付款码,支付宝会请求这个链接,这个链接后面的服务器会通过一些手段,比如请求中的 User-Agent 来判断你是用什么客户端扫的码,然后再把我们之前生成聚合付款码时提交的支付宝的付款码返回来,我们就可以用支付宝扫码支付了,其他支付方式也是一样的道理。

比如我使用 hotapp.cn 提供的收款码合并服务,生成的二维码字符串如下:

http://pay.hotapp.cn/25724473

你可以使用在线的二维码生成网站来生成二维码,比如 草料二维码

安全风险不容忽视

原理也挺简单,但是仔细想想,如果这个服务器返回来的支付二维码链接是假冒的呢(比如黑客攻击或者服务端故意为之)?而且这样的网站也很容易被黑客盯上,控制一个网站,就可以将所有的收款二维码轻易掉包,那用户付给我们的钱可就收不到了。

此前就有新闻报道说,一家超市的收款二维码,被别人恶意掉包了,老板等到月底核算的时候才发现帐有问题。如果有人恶意在服务端将收款二维码替换掉,相比掉包店铺里的收款二维码,这种使用技术进行掉包将更难以让人发现,并且此类收款场景大多数为陌生人之间的的转账,很多人只会去看用户转账成功后的确认页面,如果稍不注意的话,即使收款码被掉包了也并不容易及时发现。

目前提供聚合收款码生成服务的网站有很多,但是基本上都是一些非常小的公司甚至个人提供的服务。所以你在使用这样的服务之前需要先考虑清楚再用。聚合付款码虽然方便,但其中的安全风险不容忽视。

如果非常有必要使用此类服务,请务必在用户转账后,及时确认转账是否成功,并且检查收款人是否为自己的收款账户

欢迎使用微信扫码关注我的公众号: