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


CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
实际上提供的功能与微信/支付宝撤销类似 , 这里需要各家支付公司提供文档具体研究 。撤销支付相关问题由于撤销支付 , 可能导致退款 , 也可能关闭订单 , 接入之前一直有些问题弄不清楚 , 在官方文档处也没有查询到任何资料 , 没办法只好实测验证相关问题 。由于规定 , 支付机构不能直连微信/支付宝,所以以下测试基于银联微信/支付宝通道 。银联提供的接口与直连微信/支付宝存在些许差别 , 但是主要功能一样 。1、重复撤销通过实测 , 微信/支付宝撤销接口幂等实现 , 重复撤销返回结果一致 。不过要注意的是需要正确判断撤销的返回结果 。比如微信撤销接口成功判断还需要结合 recall 字段 , 支付宝也有类似字段 。
CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
2、订单状态微信/支付宝订单状态处理不太一致 , 微信订单状态比较复杂:
CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
也就是说 , 付款码订单一旦被撤销成功 , 再次查询订单 , 状态将会返回为已撤销(REVOKED) 。另外微信对于付款码支付订单有限制 , 是无法调用关闭订单接口关闭订单 , 所以在付款码的场景中 , 是不存在订单状态为CLOSED—已关闭 。接下来说下支付宝的状态 , 支付宝文档没要给出类似的订单状态机 , 我根据官方一些文档 , 以及一些测试结果总结出下方订单状态图 。
CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
所以支付宝的付款码订单一旦撤销成功 , 再次查询原单状态将会返回TRADE_CLOSED 。3、对账文件数据当天产生交易之后 , 次日我们需要拉取微信/支付宝对账文件 , 逐一核对数据 , 防止少账、多账问题 。微信/支付宝对账文件只会记录交易成功的订单 , 所以未支付的订单被撤销是不会出现在对账文件中 。 但是如果支付成功了 , 然后又被撤销成功 , 将会在对账文件中产生两笔记录 , 一笔正交易 , 一笔反向退款记录 。正交易与普通的退款的记录都比较好识别 , 一般可以使用我们上送给微信支付宝订单号 。 但是撤销导致退款记录 , 我们无法仅用一个单号识别 , 我们需要结合另外的字段区分判断 。微信对账文件撤销产生那笔退款 , 交易状态为 REVOKED , 所以我们可以采用商户订单号加交易状态识别出一条记录是否为撤销产生退款记录 。
CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
上面银联订单号可以当做是微信支付宝内部产生订单号 。支付宝对账文件比较麻烦 , 撤销产生的退款记录不能跟微信根据交易状态区分 。 从对账文件上看支付宝撤销产生退款与普通退款接口产生退款记录是一样的 。
CSDN轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
本文插图
仔细研究对账文件可以发现一些区别 , 撤销导致退款记录退款批次与正交易支付宝内部订单号是一致的 。 而正常退款记录 , 退款批次号是由商户自己上送的 。 所以我们可以以此筛选出撤销产生的退款记录 。4、撤销失败极端情况下 , 有可能产生多次撤销都失败的奇葩情况 , 那怎么办? 这种情况下就不用往系统自动处理方向考虑了 , 通过线下人工介入处理吧 , 毕竟这种概率太低了 。 引用知乎**@天顺**的文章中一句话: 很多时候 , 人工保障比你动脑筋想异常中的异常、如何系统自动处理来得反而高效和低成本 。这句话大家仔细品 , 越品越有道理!结尾付款码支付接入其实比较简单 , 主要难点在于撤销接口引入之后对于现有的系统的改造 , 比如撤销成功的订单之后 , 是直接修改原单的成功状态到撤销状态 , 还是说再创建一条撤销记录? 对账系统核对时 , 对端记录可能比本端多 , 如何核对?这些问题大家在接入之后一定结合现有系统好好思考一下 。版权声明:本文为CSDN博主「楼下小黑哥」的原创文章 , 遵循CC 4.0 BY-SA版权协议 , 转载请附上原文出处链接及本声明 。