支付系统-出金-【资金安全铁律】

简介: 出金第一铁律---------明确失败才失败 。 出金最怕失败,极易出现重复出款

【资金安全铁律】

🍀出金第一铁律---------明确失败才失败 。 出金最怕失败,极易出现重复出款

反例:if(xx != SUCCESS) setPayStatus(FAIL);

正例:if(xx==FAIL) setPayStatus(FAIL);

🍀改支付状态必须基于明确的付款状态字段,而不是其他code甚至msg

擦亮眼睛,注意payStatus 与 code 的区别,别再傻傻分不清了。

反例:if(pingAnResponse.code == '404' && pingAnResponse.msg == '订单不存在') setPayStatus(FAIL);

正例:if(pingAnResponse.status == 'FAIL') setPayStatus(FAIL);

🍀下发同步请求,不能返回支付状态

下发同步请求接口,我们不能返回payStatus(正确姿势是响应体里不包含payStatus字段 / 实体对象里不能定义payStatus字段)

🍀终态时,状态不可再发生变更。日常维护中,如有,必须人为介入

反例1:将失败的订单置为成功

反例2:将成功的订单置为失败(杀头)

🍀支付状态在修改时,使用状态机控制

反例:update order set status='FAIL' where orderId='001'

正例:update order set status='FAIL' where orderId='001' and status='PAYING'

🍀异常非失败。

反例:try{ .. } catch (Exception e) { setPayStatus('FAIL'); }

正例:try{ .. } catch (Exception e) { log.error(e); }

🍀业务幂等

反例:下游通道重复回调,我们重复修改状态,重复记账。

正例:使用状态锁保证幂等,先判断订单是否为终态。

目录
相关文章
|
7月前
|
安全 API 开发者
转账到支付宝账户接口:一次开发,提升打款效率
转账到支付宝账户接口:一次开发,提升打款效率
153 0
|
2月前
|
小程序
移动医保支付
移动医保支付
75 0
支付系统43-----支付宝支付-统一收单退款,全额退款这里可以发起一笔或者两笔订单
支付系统43-----支付宝支付-统一收单退款,全额退款这里可以发起一笔或者两笔订单
|
7月前
支付设计白皮书:详解!《境外信用卡支付》收单完整过程
支付设计白皮书:详解!《境外信用卡支付》收单完整过程
202 0
|
移动开发 安全 API
支付收银台初探(1)
支付收银台初探
461 0
|
存储 消息中间件 JavaScript
支付设计白皮书:支付系统的对账系统设计
支付设计白皮书:支付系统的对账系统设计
|
存储 前端开发 容灾
聊聊账务系统
聊聊账务系统
547 0
聊聊账务系统
|
开发者
支付之去银行 | 学习笔记
快速学习支付之去银行。
151 0
支付之去银行 | 学习笔记