<noframes id="bhrfl"><address id="bhrfl"></address>

    <address id="bhrfl"></address>

    <noframes id="bhrfl"><address id="bhrfl"><th id="bhrfl"></th></address>

    <form id="bhrfl"><th id="bhrfl"><progress id="bhrfl"></progress></th></form>

    <em id="bhrfl"><span id="bhrfl"></span></em>

    全部
    常見問題
    產品動態
    精選推薦

    對接支付寶接口時異步回調和同步回調的區別與作用!

    管理 管理 編輯 刪除

    PHP對接支付寶支付的時候,異步回調和同步回調是非常重要的功能,用于確認支付結果和更新訂單狀態。本文將詳細介紹異步回調和同步回調的作用,并提供具體的案例代碼。

    一、異步回調的作用

    異步回調(也稱為服務器通知)是支付寶支付過程中最重要的一步,主要用于確認支付結果。當用戶支付成功后,支付寶服務器會向商戶服務器發送一個HTTP POST請求,通知支付結果。商戶服務器接收到該回調消息后,需要驗證消息的合法性,確認支付結果,并更新訂單狀態。

    具體步驟如下:

    1. 商戶服務器接收到支付寶服務器發送的異步回調請求,并獲取請求參數。
    2. 驗證參數的合法性。通過驗簽方式,校驗請求參數是否被篡改。商戶需要將請求參數按照一定的規則進行加密,并將加密結果與支付寶提供的公鑰進行比對,以確定參數的真實性和完整性。
    3. 驗證通過后,商戶服務器處理回調請求,包括更新訂單狀態、發送郵件通知等。
    4. 商戶服務器將處理結果返回給支付寶服務器。需要返回一個字符串 "success",表示接收成功。如果不返回或者返回其他字符串,支付寶服務器會間隔一段時間內重復發送回調請求。
    5. 通過異步回調,商戶服務器可以確保支付結果的真實性,及時更新訂單狀態,避免訂單的丟失或錯誤。異步回調是支付過程中必不可少的一環,它的主要作用是與支付寶服務器進行雙向通信,確認支付結果,并進行后續處理。

    具體案例代碼如下:

    <?php
    // 驗證參數的合法性
    function verifySign($params, $publicKey) {
        $sign = $params['sign']; // 簽名參數
        unset($params['sign']); // 剔除簽名參數
        ksort($params); // 按照參數名進行升序排序
    
        $data = '';
        foreach ($params as $key => $value) {
            $data .= $key . '=' . $value . '&';
        }
        $data = rtrim($data, '&');
    
        // 使用openssl_verify函數驗簽
        $result = openssl_verify($data, base64_decode($sign), $publicKey, OPENSSL_ALGO_SHA256);
    
        return $result == 1;
    }
    
    // 更新訂單狀態
    function updateOrderStatus($orderNo, $status) {
        // 更新訂單狀態的邏輯代碼
    }
    
    // 處理支付寶異步回調請求
    function handleAlipayNotify() {
        $params = $_POST; // 獲取回調參數
        $publicKey = '支付寶提供的公鑰';
    
        // 驗證參數的合法性
        if (verifySign($params, $publicKey)) {
            // 驗簽通過
    
            $orderNo = $params['out_trade_no']; // 商戶訂單號
            $tradeStatus = $params['trade_status']; // 支付狀態
    
            if ($tradeStatus == 'TRADE_SUCCESS') {
                // 支付成功,更新訂單狀態為已支付
                updateOrderStatus($orderNo, 'paid');
            }
    
            echo 'success'; // 返回接收成功的標識
        } else {
            // 驗簽失敗,可能存在安全風險
            echo 'fail'; // 返回接收失敗的標識
        }
    }
    
    // 入口函數
    handleAlipayNotify();
    ?>

    二、同步回調的作用

    同步回調(也稱為前臺通知)的主要作用是給用戶展示支付結果頁面。當用戶支付成功后,支付寶會跳轉回商戶指定的同步回調地址,攜帶支付結果參數。商戶服務器接收到該回調后,需要驗證參數的合法性,并根據支付結果展示對應的頁面。

    具體步驟如下:

    1. 商戶服務器接收到支付寶跳轉的同步回調請求,并獲取請求參數。
    2. 驗證參數的合法性。通過驗簽方式,校驗請求參數是否被篡改,確保參數的真實性和完整性。
    3. 需要判斷支付結果的具體狀態,根據支付狀態展示對應的頁面,如支付成功頁面、支付失敗頁面等。
    4. 同步回調通常用于展示支付結果給用戶查看,不作為最終支付結果的判斷依據。因為同步回調是在前端完成的,可能會被偽造或篡改。驗證參數的合法性只是為了避免被惡意攻擊,不能作為支付結果的唯一判斷依據。

    具體案例代碼如下:

    <?php
    // 驗證參數的合法性
    function verifySign($params, $publicKey) {
        $sign = $params['sign']; // 簽名參數
        unset($params['sign']); // 剔除簽名參數
        ksort($params); // 按照參數名進行升序排序
    
        $data = '';
        foreach ($params as $key => $value) {
            $data .= $key . '=' . $value . '&';
        }
        $data = rtrim($data, '&');
    
        // 使用openssl_verify函數驗簽
        $result = openssl_verify($data, base64_decode($sign), $publicKey, OPENSSL_ALGO_SHA256);
    
        return $result == 1;
    }
    
    // 處理支付寶同步回調請求
    function handleAlipayReturn() {
        $params = $_GET; // 獲取回調參數
        $publicKey = '支付寶提供的公鑰';
    
        // 驗證參數的合法性
        if (verifySign($params, $publicKey)) {
            // 驗簽通過
    
            $tradeStatus = $params['trade_status']; // 支付狀態
    
            if ($tradeStatus == 'TRADE_SUCCESS') {
                // 支付成功,展示支付成功頁面
                echo '支付成功!';
            } else {
                // 支付失敗,展示支付失敗頁面
                echo '支付失敗!';
            }
        } else {
            // 驗簽失敗,可能存在安全風險
            echo '驗簽失?。?;
        }
    }
    
    // 入口函數
    handleAlipayReturn();
    ?>

    總結

    以上是PHP對接支付寶支付時異步回調和同步回調的具體作用以及案例代碼。異步回調用于確認支付結果和更新訂單狀態,同步回調用于展示支付結果給用戶查看。通過驗證參數的合法性,可以確保支付結果的真實性和完整性,避免安全風險。在實際開發中,需要根據具體業務需求,結合支付寶提供的接口文檔,進行相應的編碼和調試。

    請登錄后查看

    CRMEB-慕白寒窗雪 最后編輯于2023-08-16 14:04:04

    快捷回復
    回復
    回復
    回復({{post_count}}) {{!is_user ? '我的回復' :'全部回復'}}
    排序 默認正序 回復倒序 點贊倒序

    {{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

    作者 管理員 企業

    {{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
    {{item.is_suggest == 1? '取消推薦': '推薦'}}
    沙發 板凳 地板 {{item.floor}}#
    {{item.user_info.title || '暫無簡介'}}
    附件

    {{itemf.name}}

    {{item.created_at}}  {{item.ip_address}}
    打賞
    已打賞¥{{item.reward_price}}
    {{item.like_count}}
    {{item.showReply ? '取消回復' : '回復'}}
    刪除
    回復
    回復

    {{itemc.user_info.nickname}}

    {{itemc.user_name}}

    回復 {{itemc.comment_user_info.nickname}}

    附件

    {{itemf.name}}

    {{itemc.created_at}}
    打賞
    已打賞¥{{itemc.reward_price}}
    {{itemc.like_count}}
    {{itemc.showReply ? '取消回復' : '回復'}}
    刪除
    回復
    回復
    查看更多
    打賞
    已打賞¥{{reward_price}}
    8909
    {{like_count}}
    {{collect_count}}
    添加回復 ({{post_count}})

    相關推薦

    快速安全登錄

    使用微信掃碼登錄
    {{item.label}} 加精
    {{item.label}} {{item.label}} 板塊推薦 常見問題 產品動態 精選推薦 首頁頭條 首頁動態 首頁推薦
    取 消 確 定
    回復
    回復
    問題:
    問題自動獲取的帖子內容,不準確時需要手動修改. [獲取答案]
    答案:
    提交
    bug 需求 取 消 確 定
    打賞金額
    當前余額:¥{{rewardUserInfo.reward_price}}
    {{item.price}}元
    請輸入 0.1-{{reward_max_price}} 范圍內的數值
    打賞成功
    ¥{{price}}
    完成 確認打賞

    微信登錄/注冊

    切換手機號登錄

    {{ bind_phone ? '綁定手機' : '手機登錄'}}

    {{codeText}}
    切換微信登錄/注冊
    暫不綁定
    亚洲欧美字幕
    CRMEB客服

    CRMEB咨詢熱線 咨詢熱線

    400-8888-794

    微信掃碼咨詢

    CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
    返回頂部 返回頂部
    CRMEB客服