微信支付多次执行回调——php
因为微信在后台通知交互时,如果微信收到商户的应答不符合规范或超时,微信会判定本次通知失败,重新发送通知,直到成功为止(在通知一直不成功的情况下,微信总共会发起10次通知,每次通知时间距离最近一次的间隔为15/15/30/180/1800/1800/1800/1800/3600,单位:秒),但微信不保证通知最终一定能成功。
我是参考了这篇文章https://www.cnblogs.com/zmdComeOn/archive/2019/07/25/11244656.html后才发现需要返回的。
之前直接用的是微信支付php版本的demo,因为业务需要改了一下代码,最后在测试的时候发现回调中数据总是会被多次写入数据库,后来发现是我没有给微信return支付成功的信息
public function NotifyProcess($objData, $config, &$msg) { $data = $objData->GetValues(); //TODO 1、进行参数校验 if(!array_key_exists("return_code", $data) ||(array_key_exists("return_code", $data) && $data['return_code'] != "SUCCESS")) { //TODO失败,不是支付成功的通知 //如果有需要可以做失败时候的一些清理处理,并且做一些监控 $msg = "异常异常"; return false; } if(!array_key_exists("transaction_id", $data)){ $msg = "输入参数不正确"; return false; } //TODO 2、进行签名验证 try { $checkResult = $objData->CheckSign($config); if($checkResult == false){ //签名错误 Log::ERROR("签名错误..."); return false; } } catch(Exception $e) { Log::ERROR(json_encode($e)); } //TODO 3、处理业务逻辑 Log::DEBUG("call back:" . json_encode($data)); // 释放结果集 mysqli_free_result($result); //查询订单,判断订单真实性 if(!$this->Queryorder($data["transaction_id"])){ $msg = "订单查询失败"; return false; } return true; }
最后的return true不能少。
这是这次我遇上的问题,类似的问题应该也是可以看看上面的链接
老鸟也是从菜鸟开始的!