我做了一个支付接口,做了异步通知,支付成功之后 我在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那边我已经做了双重的判断,如果加过款的 就不再执行 可是还是执行了,
PHP同时发出 重复执行
答案:2 悬赏:0 手机版
解决时间 2021-03-01 23:36
- 提问者网友:轻浮
- 2021-03-01 18:52
最佳答案
- 五星知识达人网友:愁杀梦里人
- 2021-03-01 19:49
异步通知,肯定有订单号的吧,根据订单号设置一个原子锁,取得原子锁再做充值处理,否则不处理。
原子锁的方法有很多,比如创建一个空文件,文件名为订单号,创建成功就处理,创建失败就不处理。
Redis的串行机制,也可以用来做原子锁,比如 $redis->incr($key) === 1,则处理,否则不处理。
原子锁的方法有很多,比如创建一个空文件,文件名为订单号,创建成功就处理,创建失败就不处理。
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();
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯