离线支付的关键点一:付款码可以离线生成
付款码生成过程:
1、用户打开支付宝App时,会向服务端申请令牌种子;
2、支付宝服务器会根据算法生成一个令牌种子,返回给支付宝App;
3、支付宝App得到令牌种子后,根据算法生成付款码(可以离线生成)。
离线支付的关键点二:付款码是一次性且实时更新
1、支付宝App生成的付款码会包含有用户标识、令牌值等信息;
2、付款码是一次性的,且每分钟会更新一次。
这样就不会出现别人把你的付款码打印出来再去付款。
离线支付的关键点三:付款码能离线,扫码枪需在线
付款码离线支付过程:
1、线下支付时,用户打开支付宝App,出示付款码(可以离线);
2、商家用扫码枪读取付款码,并上传至支付宝服务器;
3、支付宝服务器收到商家传来的付款码后,与令牌系统里保存的信息进行对比;
4、比对通过则创建支付订单,并返回给商户订单信息,如果余额足够便可完成支付。
也就是说,付款方可以离线,但收款方得在线。通过在线的收款方搭桥,将离线的付款信息传到支付宝服务器端进行校验。
离线支付的特殊情况:付款方、收款方双离线
前面说到离线支付通常得付款方、收款方有一方得在线。但有一种特殊的场景,双方都能离线。
在支付宝的城市服务里,有公交付款的功能,目前已在部分城市部分线路落地。将来出门再也不必带公交卡、带零钱了,带着手机就行。开通这个功能的用户,页面会生成特定的付款码(与支付宝首页的付款码不是同一个),通过花呗进行付款,也是一次性、每分钟更新的。
用户乘坐公交车时,用公交车付款码进行付款。但有些公交车的收款系统不是实时在线的,可能是一路车跑完一趟后联网,也可能是一天结束时联网,而只有在公交车的收款系统联网时才会进行扣费。
所以一句话来说,就是手机离线,就通过扣款电脑搭桥做安全验证;如果双方都离线,就先记账,等能做安全验证时再扣款。