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

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

【资金安全铁律】

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

反例: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); }

🍀业务幂等

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

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

buguge
+关注
目录
打赏
0
0
0
0
40
分享
相关文章
|
4月前
|
移动医保支付
移动医保支付
160 0
支付系统43-----支付宝支付-统一收单退款,全额退款这里可以发起一笔或者两笔订单
支付系统43-----支付宝支付-统一收单退款,全额退款这里可以发起一笔或者两笔订单
|
9月前
支付设计白皮书:详解!《境外信用卡支付》收单完整过程
支付设计白皮书:详解!《境外信用卡支付》收单完整过程
237 0
【支付宝推荐】批量转账为商家大促期间转账多人保驾护航
为了提升商家在大促期间的转账效率,支付宝推出了一款免费高效的转账多人工具,免费使用!