微信支付多次執行回調——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不能少。

這是這次我遇上的問題,類似的問題應該也是可以看看上面的鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM