永发信息网

PHP同时发出 重复执行

答案:2  悬赏:0  手机版
解决时间 2021-03-01 23:36
  • 提问者网友:轻浮
  • 2021-03-01 18:52
我做了一个支付接口,做了异步通知,支付成功之后 我在apache 日志查看到 支付商那边服务器 同时发出两个通知
61.164.152.48 - - [31/Jul/2016:10:59:28 +0800] "GET /zhifu.php/返回参数 HTTP/1.1" 200 22 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
183.160.211.111 - - [31/Jul/2016:10:59:28 +0800] "GET /zhifu.php/返回参数 HTTP/1.1" 200 22 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

时间是一模一样的,这样问题就来了,有时候充值的时候订单会重复入款,重复添加,这是为什么呢?怎么避免,也不是每次都这样,偶尔会有重复入款的,请问怎么避免?PHP那边我已经做了双重的判断,如果加过款的 就不再执行 可是还是执行了,
最佳答案
  • 五星知识达人网友:愁杀梦里人
  • 2021-03-01 19:49
异步通知,肯定有订单号的吧,根据订单号设置一个原子锁,取得原子锁再做充值处理,否则不处理。
原子锁的方法有很多,比如创建一个空文件,文件名为订单号,创建成功就处理,创建失败就不处理。
Redis的串行机制,也可以用来做原子锁,比如 $redis->incr($key) === 1,则处理,否则不处理。
全部回答
  • 1楼网友:夜余生
  • 2021-03-01 20:56
function run() { static $is_run= false; if ( $is_run == false ) { $is_run = true; echo '执行成功'; run(); $is_run = false; // 执行完成 } else { echo '运行中,调用失败!'; } } run();
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯