微信付款码是如何完成付款的


微信付款码是如何完成付款的文章插图
作者:suchengliu , 腾讯 TEG 后台开发工程师
出处:
微信收款机具在慢速网络中快速收款的技术揭秘
小绿盒在2G网络环境下收款速度较慢 , 影响商户体验 , 我们通过网络连接优化、数据传输优化和后台逻辑优化等一系列措施 , 将收款耗时降低近一半 , 达到了业界领先水平 , 改善了商户体验 。
1. 背景说明1.1 产品简介微信收款商业版为了覆盖更多收款场景 , 推出小绿盒收款机具 。
1.2 我们(收单平台)做了什么

  • 发挥收单平台专业聚合收单能力 , 为小绿盒提供丰富稳定的收单功能 。
  • 提供专业的机具接入方案(支付SDK等) , 确保机具厂商高效高质量完成接入 。

微信付款码是如何完成付款的文章插图
2.问题小绿盒在2G网络下收款速度较慢(因为小绿盒收款是窄带场景 , 且4G模块成本是2G的2倍以上 , 所以小绿盒没有用4G) 。
实验室情况:在2G实验室网络环境下 , 小绿盒收款一笔平均耗时需要5秒 , 而市场主流的解决方案只需3秒 。
真实商家反馈:小绿盒收款一笔耗时基本在5秒以上 , 有时达10秒 。 收款速度慢 , 影响商户使用 。
3.目标
  • 2G实验室网络环境下 , 收款一笔耗时不能超过3秒 。
  • 实际商家收款耗时表现达到业界领先水平 。
4.优化方案4.1 产品交互说明【微信付款码是如何完成付款的】收款一笔的交互过程分4步:
微信付款码是如何完成付款的文章插图
步骤1:在键盘上输入收款金额 。
步骤2:按下确认键后进入扫码状态 , 在此过程中机具开始预建立网络连接(竞品做法一致) , 涉及DNS查询 , TCP握手和TLS握手 。
步骤3:扫码成功 , 等连接建立完成后再向支付后台发起支付请求 , 等待支付应答(小绿盒耗时5秒 , 竞品耗时3秒) 。
步骤4:收到后台返回的支付应答 , 展示支付结果 。
关键点总结:
  • 扫码状态(步骤2)期间的预建网络连接 , 是收款机具业界普遍做法 。
  • 支付耗时是指:扫码成功到收到支付应答之间的耗时(步骤3) , 受扫码快慢的影响 , 中间可能包括建立连接的部分耗时 。
4.2 现状态分析4.2.1 收款网络交互时序
微信付款码是如何完成付款的文章插图
由图可知 , 整个网络交互过程都是基于HTTPS短连接 。 收款一笔的耗时项包括:DNS解析、TCP握手、TLS握手、业务数据传输和后台处理(微信支付+其它后台逻辑) 。
可能耗时项:由4.1章节的说明可知 , DNS解析、TCP握手和TLS握手三项是否影响收款速度 , 受扫码操作(即步骤2)的快慢以及网络速度影响 , 扫码越慢 , 网络越快 , 建立网络连接(包括DNS查询 , TCP握手和TLS握手)有可能在步骤2中就全部完成了 。
固定耗时项:业务数据传输和后台处理两项为固定耗时项 。
4.2.2 耗时分布情况
微信付款码是如何完成付款的文章插图
4.2.3 和市场主流解决方案对比
微信付款码是如何完成付款的文章插图
产品方案说明DNS解析TCP握手TLS握手业务数据传输+后台处理总耗时 竞品短连接+二进制协议0(预埋ip)0.6033.6小绿盒短连接+HTTPS0.60.61.24.46.8
注:单位为秒
4.3 可能的方案
微信付款码是如何完成付款的文章插图
耗时项可能优化方案优点缺点预期收益 DNS解析长连接消除DNS查询的耗时机具需要增加长连接处理逻辑降低耗时0.6秒(1RTT)机具缓存IP消除DNS查询的耗时增加缓存IP逻辑降低耗时0.6秒(1RTT)TCP握手长连接消除TCP握手的耗时机具需要增加长连接处理逻辑降低耗时0.6秒(1RTT)UDP消除TCP握手的耗时1.可靠传输 , 拥塞控制等 2.需要一套完整安全方案:加密和认证 , 密钥安全等 3.机具程序和后台程序改动量大 4.不是所有的网络环境能使用UDP降低耗时<=0.6秒(1RTT能完成支付则为0.6秒)TLS握手长连接1.消除TLS握手的耗时 2.安全:业界标准机具需要增加长连接处理逻辑降低耗时1.2秒(2RTT)自主加密协议消除TLS握手的耗时1.需要一套完整安全方案:加密和认证 , 密钥安全等 2.机具程序和后台程序改动量大降低耗时1.2秒(2RTT)业务数据传输精减业务数据改动量小业务协议变化降低耗时和精减字节数有关,1秒/KB( GPRS Wiki )使用二进制协议能最大程度精减机具程序和后台程序改动量大降低耗时和精减字节数有关,1秒/KB后台访问微信支付长连接消除DNS查询+TCP握手+TLS握手的耗时增加长连接维护逻辑降低耗时0.51秒(后台内部建立TLS连接耗时约0.17秒 , 一共建立3次)签名本地化签名无网络交互业务层面可能不支持降低耗时0.6秒(一次签名 , 一次验签)