PHP之重要业务的多接口调用

应用场景:

  PHP实现转账功能, 扣款和充值是两个独立的接口, 用PHP先从A账户扣款, 然后往B账户充值.

实现方案:

1. 设计表.

  两张表, 接口表(tb_interface): 记录接口调用的日志; 转帐表(tb_exchange): 记录转账过程.

 2. 思路.

  1) 生成扣款流水号. 调用扣款接口, 记录接口调用情况到接口表中.

  a. 如果接口返回成功,进入第2)步;

  b.如果接口返回失败, 用流水号查询扣款记录的状态, 如果有扣款成功的记录, 认为扣款成功进入第2)步;

  c. 如果没有记录或者扣款记录的状态不是成功, 认为扣款失败, 重新生成扣款流水号, 重复扣款--接口返回判断的流程,

    失败重试3次, 如果结果还是失败, 认为转账失败, 进入第4)步.

  2)  生成充值流水号. 调用充值接口, 记录接口调用情况到接口表中.

  a. 接口返回成功, 进入第3)步;

  b. 如果接口返回失败, 用流水号查询充值记录的状态, 如果有充值成功的记录, 认为充值成功进入第3)步;

  c. 如果没有成功的记录, 本次充值失败. 重新生成充值流水号, 重复充值--接口返回判断的流程,

  失败重试3次, 如果结果还是失败, 认为转账失败, 进入第5)步.

  3) 转账成功, 记录相关信息到转账表中, 退出操作;

  4) 转账失败, 退出操作. 后续操作: 只需要检查失败原因即可.

  5) 转账失败, 退出操作. 后续操作: 需要给B账户充值(业务失败); 检查失败原因. 

3. 总结.

  过程: 1)和2)

  结果: 3)  4)  5)

  结果3)是最理想的,

  结果4)是可以接受的, 虽然没有成功, 但是不需要额外的操作;

  结果5)是应该极力避免的, 每次都需要额外的操作来解决产生的问题.

  如何避免结果5)呢, 可以把步骤2)中的一些逻辑判断放在步骤1)来做; 最关键的还是检查步骤2)失败的主要原因.

4. 备注.

  这样的场景, 在某种情况下是一个事务处理的场景: 要么都成功, 要么都失败.

转载于:https://www.cnblogs.com/DavidYan/articles/2457451.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值