因為微信在后台通知交互時,如果微信收到商戶的應答不符合規范或超時,微信會判定本次通知失敗,重新發送通知,直到成功為止(在通知一直不成功的情況下,微信總共會發起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不能少。
這是這次我遇上的問題,類似的問題應該也是可以看看上面的鏈接