没网络也能支付?揭开支付宝和微信付款码的秘密

移动支付现在非常的普及,说夸张点,连乞丐都支持扫码收钱了。我们最常用的支付宝和微信支付相信已经有非常多的用户在使用了,因为确实非常方便,出门不需要携带那么多现金,付账扫码就可以了。当然在实际使用中我们也会遇到像手机欠费或者信号不好不能联网的情况,这个时候其实也是可以实现完成支付的。

没网络时也能进行支付(离线支付),是一个听上去挺神奇,实现原理又很巧妙的支付方式。

离线支付的全过程如下图所示。用户出示付款码,商家使用扫码枪等扫描付款码完成收款。

离线支付的关键点一:付款码可以离线生成

付款码生成过程:

1、用户打开支付宝App时,会向服务端申请令牌种子;

2、支付宝服务器会根据算法生成一个令牌种子,返回给支付宝App;

3、支付宝App得到令牌种子后,根据算法生成付款码(可以离线生成)。

离线支付的关键点二:付款码是一次性且实时更新

1、支付宝App生成的付款码会包含有用户标识、令牌值等信息;

2、付款码是一次性的,且每分钟会更新一次。

这样就不会出现别人把你的付款码打印出来再去付款。

离线支付的关键点三:付款码能离线,扫码枪需在线

付款码离线支付过程:

1、线下支付时,用户打开支付宝App,出示付款码(可以离线);

2、商家用扫码枪读取付款码,并上传至支付宝服务器;

3、支付宝服务器收到商家传来的付款码后,与令牌系统里保存的信息进行对比;

4、比对通过则创建支付订单,并返回给商户订单信息,如果余额足够便可完成支付。

也就是说,付款方可以离线,但收款方得在线。通过在线的收款方搭桥,将离线的付款信息传到支付宝服务器端进行校验。

离线支付的特殊情况:付款方、收款方双离线

前面说到离线支付通常得付款方、收款方有一方得在线。但有一种特殊的场景,双方都能离线。

在支付宝的城市服务里,有公交付款的功能,目前已在部分城市部分线路落地。将来出门再也不必带公交卡、带零钱了,带着手机就行。开通这个功能的用户,页面会生成特定的付款码(与支付宝首页的付款码不是同一个),通过花呗进行付款,也是一次性、每分钟更新的。

用户乘坐公交车时,用公交车付款码进行付款。但有些公交车的收款系统不是实时在线的,可能是一路车跑完一趟后联网,也可能是一天结束时联网,而只有在公交车的收款系统联网时才会进行扣费。

所以一句话来说,就是手机离线,就通过扣款电脑搭桥做安全验证;如果双方都离线,就先记账,等能做安全验证时再扣款。

原文发布于微信公众号 - 钱塘大数据(qtbigdata)

原文发表时间:2017-10-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ASP.NETCore

ASP.NET Core 整合Autofac和Castle实现自动AOP拦截

除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninjec...

674
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2587
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2802
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4868
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2192
来自专栏落花落雨不落叶

canvas画简单电路图

63111
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6948
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2665
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2070

扫码关注云+社区