CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划


CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
【CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划】作者 | 楼下小黑哥 责编 | 王晓曼 出品 | CSDN博客前言最近由于业务需求 , 需要开发付款码功能 , 该接口底层将会聚合市面上主流钱包 APP 的付款码功能 , 如微信支付 , 支付宝支付 。ps:付款码支付别称有很多 , 如微信支付端支付产品为付款码支付(之前的文档叫做刷卡支付),而支付宝端产品为当面付-条支付,而有些文档会成为二维码被扫支付 。下文统一使用微信的定义方式 , 统称为付款码支付 。可能有些同学对于付款码支付这个听起来很陌生 , 其实这个功能我们可能每天都在被使用 。像我们在便利店买个早饭 , 最后结账时 , 使用支付宝/微信支付付款 。 收银员会让我们展示支付宝/微信付款码 , 然后使用扫码枪获取此码 , 最后上送给微信/支付宝服务端完成一次扣款 。以支付宝为例 , 具体用户端支付流程如下:
CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
付款码支付后台调用流程如下:
CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
付款码支付详细版流程微信/支付宝付款码支付调用流程大同小异 , 官网写的都比较清楚 , 这里直接用支付宝的官网的流程 。
CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
从上面的流程可以看到 , 付款码支付可以说是一个同步的接口 , 即接口同步返回扣款结果 , 无需通过另外异步通知获取结果 。不过这里我们需要注意 , 由于涉及安全风控等问题 , 付款码支付过程用户端可能需要输入密码确认支付 , 此时付款码接口将会返回等待用户支付 。接入时务必是正确判断返回信息 , 若返回以下结果 , 代表此时用户正在输入密码 。

  • 微信支付:err_code=USERPAYING 或 err_code=SYSTEMERROR;
  • 支付宝:code=10003 或 code=20000 。
微信付款码支付在以下情况需要输入密码二次确认 。
CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
支付宝官方文档暂未找到相关规则 , 经过测试当支付金额大于 2000, 需要输入密码 。 如果有熟悉其他验密规则的同学 , 可以在评论区留言一下 。另外一点需要注意的是 , 微信/支付宝其他支付接口 , 支付成功之后 , 微信/支付宝服务端将会发送消息通知支付结果 。 但是付款码不一样 , 该接口是不会有消息通知 。所以如果付款码支付若返回等待用户输入密码 , 商家后台服务必须定时调用调用微信支付/支付宝查询接口 , 获取支付结果 。
CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
撤销支付如果在一段时间内比如30s , 轮询查询支付结果返回都是等待用户支付 , 或者支付交易过程返回失败或支付系统超时 , 这两种情况官方文档都是建议立刻调用撤销接口撤销交易 。如果此订单用户支付失败 , 撤销接口将会订单关闭;如果用户支付成功 , 撤销接口将会订单资金退还给用户 。也就是说撤销支付接口功能上等同于关闭订单加上退款 。 虽然撤销也具有退款功能 , 但是两者存在比较大的区别:1、支付类型限制微信/支付宝撤销支付仅能撤销付款码支付类型的订单 , 而退款可以支持多种支付类型的订单 。2、退款金额撤销接口只能是全额退款 , 而退款接口支持转入金额 , 可以全额退款 , 也可以部分退款 。3、时间限制撤销接口时间限制比较短 , 比如微信支付撤销支持7 天内的订单 , 而支付宝撤销接口仅支持当天的订单 。但是退款接口可以支持较长时间订单退款 , 比如微信支付退款支持一年内的订单 , 而支付宝仅支持3 个月内订单 。基于以上区别 , 其他正常支付的单如需实现相同功能请调用退款接口 , 官方文档建议仅在异常的情况下才建议调用撤销支付接口 。另外再说一点 , 有些地方这个功能接口称为冲正接口 , 如下面工商二维码支付 。