平常我们在购物付款时,使用手机中的微信或支付宝扫一扫即可完成支付,无需像以前携带现金等着商户找零钱。线下扫码支付大大的提高了我们付款的效率,今天就主要谈一谈扫码支付的实现流程,让我们享受快捷的同时,也了解其中的原理。
二维码——信息的载体
二维码现在已经悄悄得走进我们的身边,改变着我们的日常生活方式。然而我们对这个新生的事物即熟悉又陌生,知道它功能很强大,能为我们的生活带来很大的便利性,但是我们却不知道这个看似简单的东西是如何产生的。
来简单说说二维码:二维码是用一定规则排布的点阵的图像来编码信息的方式。与二维码对应的是传统的“条码”(一维码)。和“条码”一样,二维码具有如下特点:容易生成、容易被机器识别;但是“二维码”具有更多的优点:高容错性、搞污损能力、高密度的信息承载能力。二维码曾被腾讯公司总裁 马化腾 誉为:连接线上和线下的通道。
说起扫码支付,就不得不提二维码。线下所有的扫码支付都是以扫二维码开始,通过扫描二维码,我们可以看到付款页面商家的名称,所以二维码在这里承担的角色是——信息的载体,它通过黑白相间的排列组合记录信息。不止是支付,我们看到很多APP的下载链接,也是用二维码的形式记录链接地址。现在网上有很多现成的工具,输入一段内容后,即可把内容生成二维码,所以生成二维码这一步的实现流程不存在技术难题。
选择二维码作为付款信息的载体,一方面是受收银台扫描商品一维码来识别商品,这一场景的启发,另一方面是二维码本身可存储足够大的数据信息,而且支持不同的数据格式,同时二维码有一定的容错性,部分损坏后仍可正常读取。这一切,使得二维码成为了被大众广泛使用的信息载体。
二维码支付植根于多种交易场合,如付款账户二维码支付、收款账户二维码支付、订单二维码支付、场景二维码支付等等。二维码支付的触角已经延伸到线上和线下,只需要轻松一扫,不需要插入银行卡、输入密码、打印凭条、签字就可以轻松完成交易。相比于繁琐的银行卡收单程序,二维码支付方便快捷的优势受到很多用户的青睐。
二维码拥有强大的信息容量大存储量,并可以标识文字网址等多方面的信息,使用成本十分低廉。目前,二维码已经广范应用于金融支付领域,正改变着传统支付习惯。二维码支付已经在我国众多行业取得规模化应用,成为许多商家和消费者首选的金融支付方式。
二维码识别——APP校验及后台解析
二维码携带的信息,我们无法通过肉眼识别,不同的支付机构在二维码中注入的信息规则不一致,需要对应的服务器根据其编码规则解析。我们每次使用扫一扫识别二维码后,都会提示“正在处理中”,意味着后台服务器正在解析这个二维码的内容,比如核对二维码携带的链接地址是否合法(像微信解析出是支付宝的链接会屏蔽)、是属于支付链接还是属于外链网址等。
校验的规则很多,就支付链接来说,服务器校验属于自己公司的支付链接后,会获取支付链接中包含的商户信息,进而判断该商户是否存在、商户状态是否正常等,所有校验通过后,后台服务器会把商户名称返回到发起用户的手机APP上,同时告诉APP,服务器校验通过了,APP你可以调起收银台了。
于是我们确定支付,输入支付密码,后台继续校验支付密码的正确性,正确的话支付就此完成。
扫码支付流程的关键步骤
从这个过程来看,要实现扫码支付的流程,最关键的是要定义允许识别哪些类型的二维码以及后台的校验逻辑。
定义允许识别哪些类型的二维码。也就是说,当APP扫一扫,如果产品经理定义,发现二维码携带的信息是别家的网址“https://www.tina.com”,就在我们APP这边进行过滤,比如只要不是以“https://www.wx.com”开头的,不去请求服务器。所以,有些时候,明明是网址,但是解析后你看到的是一串纯文本。
比如定义支付链接的格式为“https//qr.wx.com……”,每次检测到该链接开头的,就请求服务器去校验该支付链接的有效性。
此外,还需要定义平台自有的解析规则,如微信识别为付款码是以13开头,微信检测到数字内容是以13开头的,会先去匹配其是否符合付款码的规则,符合的话才会进行后续的解析,如下图所示:
以上说的是主扫,也就是用户扫商家;对于商家扫用户,原理是一样的,只不过用户的付款码中包含的是识别该用户的专属ID,商家通过收银系统向微信或支付宝提交订单时,把扫码枪识别出来的信息传递给微信或支付宝,他们根据这个专属ID找到对应的用户,通过代扣直接就扣款了。