• 主页
  • 随笔
  • 技术笔记
  • 全部文章
标签 友链 关于我

  • 主页
  • 随笔
  • 技术笔记
  • 全部文章

微信支付宝离线支付原理

阅读数:次 2022-05-01
字数统计: 1.1k字   |   阅读时长≈ 3分

移动支付现在非常的普及,最常用的支付宝和微信支付相信已经有非常多的用户在使用了。微信,支付宝都可以实现离线支付。那么在没网络的情况下,离线支付如何实现。

一、前提条件:

1.离线支付功能只支持已签约免密支付/自动扣款的项目,比如支付宝或者微信的付款码。不能超过免密支付限额。

2.商家手持扫码枪扫码,在金额比较少的情况下,不需要输入支付密码验证就可以完成支付的。

3.手机可以离线,但是作为收款方的商户需要自己的扫码设备保持在线,通过在线的收款方搭桥,将离线的付款信息传到支付宝服务器端进行校验,最后完成支付操作

二、支付流程图:

三、实现流程:

1.离线生成的付款码:

1.用户打开支付宝客户端选择付款码,软件会向服务端申请令牌种子

2.支付宝服务器会根据算法生成一个令牌种子,返回给支付宝客户端

3.支付宝客户端得到令牌种子后,根据算法生成付款码(可以离线生成)

2.付款码是一次性且动态更新

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

2.付款码是一次性的,且每分钟会更新一次,有效避免出现别人把你的付款码打印出来再去付款

3.扫码枪在线

1.线下支付时,打开支付宝客户端,出示付款码(可以离线状态)

2.商家扫码枪读取付款码,通过商家的设备上传至支付宝服务器

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

4.比对匹配则创建支付订单,并返回给商户订单信息,如果用户的余额足够便可完成支付

四.离线码的劣势:

一.算法调整不灵活,如果相关算法较大的调整,可能需要升级客户端,并且这个期间服务端还需要兼容新老算法产生的付款码。

二.安全性问题,正常的情况相关密钥无法被普通用户获取,但是架不住有有心之人。他们可能通过获取手机用户 Root 权限或者越狱手机,利用恶意程序获取密钥,然后随意生成付款码。
不过这一点,我觉得不过过分担心,蚂蚁集团这么多大神,不是吃干饭的,他们肯定有很多措施保证支付安全。

三.数据碰撞问题,A 用户生成付款码算出来与 B 用户一致,这就 Hash 算法一样,再怎么优秀的算法,也有概率才生一样的额 Hash 值。
这就导致原本是扣用户 A 的钱,最后却扣了 B 用户。这样一来,确实很乌龙,对于 B 用户来讲,莫名其妙被扣钱了。

不过这种事放到放到现在,我觉得还是比买彩票中奖低,所以这种事还是不用过分担心了。

总结:

总结一下,我们平常使用付款码支付,其实原理就是商家端获取我们手机 APP 付款码(「其实就是一串数字」),然后后台调用支付宝支付接口完成扣款。

这个流程商家端后台程序必须联网在线,但是对于我们客户端来讲可以在线,也可以离线。

如果我们客户端在线,那就可以通过服务端向客户端发送付款码,这种方式更加安全,灵活,但是对于弱网环境下,体验就很差。

如果我们客户端没网,那就通过客户端通过一定算法生成付款码,服务端收到经过相关校验,确认是哪个用户,确认码有效性,并且完成扣款。这种方式,适合客户端没有网络的情况,不过相对不灵活,且安全性稍差。

了解原理,有没有觉得还是挺有意思的下次排队付款钱,如果手机没网,不要担心尴尬,放心拿出手机付钱

  • 本文作者: Grx
  • 本文链接: https://ruixiaoguo.github.io/Grx.github.io/Grx.github.io/2022/05/01/微信支付宝离线支付原理/
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
  • OC

扫一扫,分享到微信

Apple授权登录-sign in with Apple
Carthage包管理三方库
  1. 1. 一、前提条件:
  2. 2. 二、支付流程图:
  3. 3. 三、实现流程:
    1. 3.1. 1.离线生成的付款码:
    2. 3.2. 2.付款码是一次性且动态更新
    3. 3.3. 3.扫码枪在线
  4. 4. 四.离线码的劣势:
  5. 5. 总结:
© 2014-2024 Grx
GitHub:hexo-theme-yilia-plus by Litten
本站总访问量次 | 本站访客数人
  • 标签
  • 友链
  • 关于我

tag:

  • life
  • OC
  • Google
  • Fastlane
  • Flutter
  • hexo
  • 智能家居
  • Apple Watch
  • 逆向
  • Lottie
  • PHP
  • cocos2d
  • Mac
  • MonkeyKing
  • RN
  • Swift
  • RAC
  • WKWebView
  • WebView
  • Xcode
  • xcode
  • ios
  • Android
  • appledoc
  • MMKV
  • LLVM
  • FreamWork






    
    

  • 唐巧的博客
  • 王巍(喵神)OneVsDen
  • 阿里“念纪“
  • 滴滴-戴铭
  • 郭曜源(ibireme)
  • 阿里”南栀倾寒“
  • 蘑菇街李忠
  • 码农人生
  • 玉令天下
  • bang
  • Ian的博客
这里是Grx的个人博客:
iOS开发工程师一枚
联系方式:
QQ:1217255509
Email:grx0917@sina.com
知识管理,时间管理,自我管理,架构即未来
欢迎技术交流!