支付系统返回值,错误码,code
2016-01-08 00:16
253 查看
code分成三类:
1. 明确成功的code
2. 明确失败的code
3. 未知状态的code(未知的code)
原则:
未知code保持进行中
1. 提现一定要查询修复方式。同步的:只相信success,其他保持不变,通过状态来决定状态。异步的:同步,维持状态不变。
2. 充值(预充值),成功保持进行中,其他不关闭,只是记录已出错过,下次重新获取流水号。
如果未知code关闭,这样就不会出现因为微信某种原因拒绝,重试还是拒绝,导致用户再也无法支付的现象。一直用同个流水号。导致问题,支付后又来请求,会导致关闭掉。
改进: 不关闭,只是记录已出错过。 不影响状态流转。解决了支付的一个大问题,线上遇到的场景:未知code到底是保持进行中,还是保持关闭的问题。
对支付而言:这种case下,如果保持进行中,又支付,还是失败的。如果关闭,可能已经支付成功了,但是又调用了一次。
3. 代扣。 未知code。 关闭对我方有好处,用户损失,不会导致用户无法重复代扣的问题。进行中好处,可以通过后续状态检查校验。
未知状态的code。
这些code有些是错误可重试的,有些是不可重试的,不管可不可重试,最好都阻断掉。
所以请求方可以重新请求,以获取结果。也可以采用查询状态的方案来实现。
好的提供者,内部要保证完整性。采用状态查询修复和再次查询的方案。
如果某个提供者,不提供内部完整性。
查询到状态为
1、进行中,重试,触发流转。
2、失败,关闭。不重试。
3.、 成功。不重试
4. 、无,重试。可能触发流转,也可能继续被拒绝返回未知code,陷入无限死循环。
所以建议
如果对方明确接口是可重试的,内部不保证完整性,建议用后者。
1. 明确成功的code
2. 明确失败的code
3. 未知状态的code(未知的code)
原则:
未知code保持进行中
1. 提现一定要查询修复方式。同步的:只相信success,其他保持不变,通过状态来决定状态。异步的:同步,维持状态不变。
2. 充值(预充值),成功保持进行中,其他不关闭,只是记录已出错过,下次重新获取流水号。
如果未知code关闭,这样就不会出现因为微信某种原因拒绝,重试还是拒绝,导致用户再也无法支付的现象。一直用同个流水号。导致问题,支付后又来请求,会导致关闭掉。
改进: 不关闭,只是记录已出错过。 不影响状态流转。解决了支付的一个大问题,线上遇到的场景:未知code到底是保持进行中,还是保持关闭的问题。
对支付而言:这种case下,如果保持进行中,又支付,还是失败的。如果关闭,可能已经支付成功了,但是又调用了一次。
3. 代扣。 未知code。 关闭对我方有好处,用户损失,不会导致用户无法重复代扣的问题。进行中好处,可以通过后续状态检查校验。
未知状态的code。
这些code有些是错误可重试的,有些是不可重试的,不管可不可重试,最好都阻断掉。
所以请求方可以重新请求,以获取结果。也可以采用查询状态的方案来实现。
好的提供者,内部要保证完整性。采用状态查询修复和再次查询的方案。
如果某个提供者,不提供内部完整性。
查询到状态为
1、进行中,重试,触发流转。
2、失败,关闭。不重试。
3.、 成功。不重试
4. 、无,重试。可能触发流转,也可能继续被拒绝返回未知code,陷入无限死循环。
所以建议
如果对方明确接口是可重试的,内部不保证完整性,建议用后者。
相关文章推荐
- NSNumber讲解之二——NSNumber的大小比较
- 模板模式 c#
- linux网络编程之socket(十一):套接字I/O超时设置方法和用select实现超时
- Project or Program Success: What Matters
- NSNumber讲解之一——NSNumber封装数值型数据
- Git常用命令
- [OJ] Matrix Zigzag Traversal
- jquery-validate常用扩展验证
- linux socket套接字超时之setsockopt
- 一条命令搞定在VMware中的Ubuntu14.04 64 位安装Docker
- SQLServer 动态sql创建指定数据库下的视图
- 秒杀系统架构分析与实战
- [时空与预测]星际迷航-暗黑无边
- LNMP架构下访问php页面出现500错误
- struts2对action指定方法进行校验(人工编码)
- Linux开发四_bootloader启动linux内核
- 用setsockopt()来控制recv()与send()的超时
- 桌面文件自动整理脚本
- cocos2d-3.8.1版本tableview的使用(怎么取消弹簧效果);
- Linux设置socket客户端的连接超时(转)