訂單不再卡關!2026 WordPress 金流串接實戰:ECPay 與 HitPay API 整合開發全攻略 (附防呆程式碼)

2026/02/18 | API 串接與自動化, WC 開發, WP 開發技巧

訂單不再卡關!2026 WordPress 金流串接實戰:ECPay 與 HitPay API 整合開發全攻略 (附防呆程式碼)

這裡是 Eric,浪花科技的資深工程師。剛喝完今天的第三杯濃縮咖啡,看著螢幕上那行 cURL error 28: Operation timed out,我不禁感嘆:都已經 2026 年了,為什麼金流串接還是後端開發者的惡夢?

如果你也是 WordPress 開發者,或者是正在為 WooCommerce 商城尋求客製化金流解決方案的業主,這篇文章就是為你準備的。市面上的金流外掛雖然方便,但在高流量併發、特殊結帳邏輯(如訂閱制、分期付款組合)或需要深度整合 CRM 時,往往顯得力不從心。這時候,直接對接 API 才是王道。

今天,我們要深入探討台灣市佔率極高的 ECPay (綠界科技) 與近年來在跨境支付異軍突起的 HitPay。我不只會教你怎麼送出請求,更會分享那些官方文件沒寫、但會讓你 Debug 到懷疑人生的「坑」。

為什麼 2026 年你還需要手刻金流 API?

很多客戶問我:「Eric,直接裝官方外掛不就好了嗎?」

當然可以,直到你的行銷團隊決定在「雙 11」舉辦一個「買 A 送 B 再折 C,且必須使用信用卡分期」的活動,而現成的外掛不支援這種複雜邏輯時;或者當你的網站流量瞬間爆衝,外掛那臃腫的載入機制拖慢了 TTFB (Time To First Byte),導致掉單率飆升時。這時候,輕量化、客製化的 API 串接就是救命稻草。

在 2026 年的開發環境下,我們更講究安全性 (Security)效能 (Performance)。手刻 API 讓我們能精準控制資料流,並實作更嚴謹的簽章驗證。

ECPay (綠界) API 串接實戰:搞定那個該死的 CheckMacValue

綠界的 API 文件洋洋灑灑,但最讓開發者頭痛的永遠是 CheckMacValue(檢查碼)的生成。只要差一個字元、排序錯了,或是 URL Encode 的方式不對,綠界伺服器就會冷冷地回你一個錯誤。

1. 參數排序與加密邏輯

ECPay 的加密邏輯核心在於:將所有參數依字母順序排序,前後加上 HashKey 與 HashIV,進行 URL Encode,最後轉小寫並計算 MD5 雜湊值(再轉大寫)。

聽起來很簡單?魔鬼藏在細節裡。在 PHP 8.3+ 環境中,我們建議使用更嚴謹的編碼方式。

2. 實戰程式碼 (支援經典編輯器)

以下這段 Code 是我封裝過的 Helper Function,特別針對 URL Encode 做了處理,避免 .NET 與 PHP 編碼差異導致的驗證失敗:


class ECPay_Helper {
    private $HashKey;
    private $HashIV;
    private $ServiceURL;

    public function __construct($key, $iv, $url) {
        $this->HashKey = $key;
        $this->HashIV = $iv;
        $this->ServiceURL = $url;
    }

    public function generate_check_mac_value($params) {
        // 1. 依照 Key 排序
        ksort($params);

        // 2. 串接字串
        $rawString = "HashKey=" . $this->HashKey;
        foreach ($params as $key => $value) {
            $rawString .= "&" . $key . "=" . $value;
        }
        $rawString .= "&HashIV=" . $this->HashIV;

        // 3. URL Encode (注意:綠界需要將特殊字元轉換)
        $encodedString = urlencode($rawString);
        
        // 綠界特殊的取代邏輯 (這是最容易踩坑的地方)
        $encodedString = str_replace(
            ['%2d', '%5f', '%2e', '%21', '%2a', '%28', '%29'],
            ['-', '_', '.', '!', '*', '(', ')'],
            $encodedString
        );

        // 4. 轉小寫 -> SHA256 (現在通常建議 SHA256) -> 轉大寫
        // 注意:具體用 MD5 或 SHA256 需看你申請的 API 版本,此處示範 SHA256
        return strtoupper(hash('sha256', strtolower($encodedString)));
    }

    public function create_order($orderData) {
        $orderData['CheckMacValue'] = $this->generate_check_mac_value($orderData);
        // 發送 POST 請求...
    }
}

Eric 的小囉嗦: 請特別注意 str_replace 那一段。PHP 的 urlencode 會把某些符號編碼,但綠界的 .NET 系統不這麼做。如果你少了這步還原,算出來的雜湊值永遠都不會對。

HitPay API 串接實戰:擁抱 Webhook 與現代化標準

相較於老牌的綠界,HitPay 的 API 設計就顯得「現代」許多。它採用標準的 RESTful 架構,回傳 JSON 格式,這對習慣寫 Laravel 或 Headless WordPress 的工程師來說簡直是福音。

1. API 金鑰與安全

HitPay 使用 X-BUSINESS-API-KEY Header 進行驗證。雖然簡單,但請務必將 Key 放在 wp-config.php 或環境變數中,千萬不要直接寫死在程式碼裡,也不要存進資料庫的 `wp_options` 表,以免被 SQL Injection 一波帶走。

2. Webhook 驗證 (HMAC SHA256)

HitPay 處理付款結果主要依賴 Webhook (Callback)。為了防止有人偽造請求假裝付款成功,驗證簽章 (Signature) 是絕對必要的。


function verify_hitpay_webhook($payload, $signature, $salt) {
    // 驗證邏輯:HMAC SHA256
    $calculated_signature = hash_hmac('sha256', $payload, $salt);
    
    // 使用 hash_equals 防止時序攻擊 (Timing Attack)
    if (hash_equals($calculated_signature, $signature)) {
        return true;
    }
    
    error_log('HitPay Signature Mismatch: ' . $calculated_signature . ' vs ' . $signature);
    return false;
}

// 在 WordPress 初始化時掛載
add_action('init', function() {
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_GET['hitpay_callback'])) {
        $body = file_get_contents('php://input');
        $signature = $_SERVER['HTTP_X_HITPAY_SIGNATURE'] ?? '';
        $salt = '你的_HitPay_Salt'; // 從 HitPay 後台取得

        if (verify_hitpay_webhook($body, $signature, $salt)) {
            $data = json_decode($body, true);
            // 處理訂單狀態更新邏輯...
            // 記得回傳 200 OK,不然 HitPay 會一直重試
            http_response_code(200);
            exit;
        }
    }
});

技術重點: 這裡我使用了 hash_equals 函數。在 2026 年的資安標準下,單純用 == 比較字串是不合格的,因為它容易受到「時序攻擊」破解。

金流開發者的生存法則:防禦性程式設計

串接金流 API,程式碼能跑只是 60 分。要拿到 100 分,你必須考慮「當網路斷線、伺服器爆炸、使用者手賤」時會發生什麼事。

1. 冪等性 (Idempotency) 處理

不管是 ECPay 還是 HitPay,伺服器都有可能因為網路逾時而重複發送 Webhook。你的程式碼必須具備「冪等性」,也就是說,收到兩次「付款成功」的通知,不能入金兩次

  • 解法: 在更新訂單狀態前,先檢查 post_meta 或資料庫欄位。如果訂單狀態已經是 processingcompleted,就直接回傳 200 OK 並結束程式,不要再跑一次邏輯。

2. Log 紀錄的藝術

當金流出錯時,Log 是你唯一的線索。但請注意個資法規(GDPR / PDPA)。

  • Do: 紀錄 Transaction ID、錯誤代碼 (Error Code)、API 回傳的原始訊息。
  • Don’t: 絕對不要紀錄完整的信用卡號、CVV 或客戶的身分證字號。

相關閱讀

如果你想更深入了解與金流相關的資料庫處理與資安架構,強烈建議閱讀以下幾篇浪花科技的技術文章,這能幫你避開更多坑:

結論

串接 ECPay 和 HitPay 其實不難,難的是如何寫出「強健」的程式碼。在 2026 年,我們不僅要追求功能實現,更要將資安與效能放在第一位。希望這篇文章的程式碼片段能幫你節省幾小時的 Debug 時間。

如果你發現自己的業務邏輯太過複雜,或者是現有的工程團隊在金流整合上遇到了難以跨越的技術債,別硬撐。不管是複雜的訂閱制扣款、跨國稅務計算,還是高併發的搶購系統,我們都有豐富的實戰經驗。

需要更專業的 WordPress 金流串接與系統架構諮詢?

立即填寫表單聯繫浪花科技

常見問題 (FAQ)

Q1: ECPay 回傳 200 OK 但訂單狀態沒更新?

這通常是「Server-to-Server」的溝通問題。請檢查你的伺服器防火牆 (Firewall) 是否擋住了綠界的 IP,或者你是否有安裝安全性外掛 (如 Wordfence) 誤判了綠界的 Webhook 請求。另外,請確保你的 CheckMacValue 驗證邏輯與綠界完全一致,包含 URL Encode 的特殊字元取代。

Q2: HitPay 的測試環境 (Sandbox) 付款成功,正式環境卻失敗?

HitPay 的正式環境與測試環境使用的是不同的 API Endpoint 與 Salt Key。請再次確認你的程式碼中,是否根據環境變數 (Environment Variable) 正確切換了 `Production` 和 `Sandbox` 的網址,以及是否換上了正式環境的 API Key。

Q3: 手刻 API 金流串接比起使用現成外掛有什麼好處?

手刻 API 提供最高的靈活度。你可以自訂結帳流程 (UI/UX)、整合公司內部的 ERP/CRM 系統、減少不必要的外掛載入以提升網站速度,並且可以針對特殊的商業邏輯 (如階梯式折扣、組合商品分期) 進行深度客製化,這是通用型外掛難以做到的。