~/blog/woocommerce-product-api-batch-processing-guide.md
電商與 WooCommerce · 2025 / 08 / 15

1000 筆同步要跑 500 秒?WooCommerce 商品 API 批次處理指南

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
1000 筆同步要跑 500 秒?WooCommerce 商品 API 批次處理指南
目錄 table-of-contents.md

1000 筆商品逐筆呼叫 API 同步,一次請求抓 0.5 秒,跑完就是 500 秒——這還沒算伺服器被打掛的風險。客戶的 ERP 每天要同步幾千件商品的庫存和價格,工程師寫個迴圈一件一件打 API 的下場,就是腳本跑到天荒地老、CPU 飆到 100%。WooCommerce 其實內建批次端點,一次請求就能處理多筆資料,這篇帶你把同步流程徹底改造。

如果你對這個畫面感到熟悉,或是你正準備踏入 WooCommerce 自動化的世界,那這篇文章就是你的救贖。市面上很多「WooCommerce 商品 API 使用教學」都只教你如何新增或更新「單一」商品,但那在真實的商業場景中,效率實在太低了。今天,我們不談那些基礎中的基礎,我們要來點硬核的、能真正解決問題的——批次處理 (Batch Processing)。準備好了嗎?讓我們一起把你的網站效能調校到極致!

WooCommerce API 基礎回顧:上戰場前的軍備檢查

我知道有些朋友可能是第一次接觸 API,別擔心,我們快速複習一下基礎知識,確保大家都在同一個起跑線上。如果你已經是老手了,可以快速跳到下個章節。

什麼是 REST API?為什麼你需要它?

簡單來說,REST API 就像是餐廳裡的服務生。你的程式(客人)可以透過一個標準化的方式(菜單,也就是 API 文件)告訴 WooCommerce(廚房)你想要做什麼,例如「給我所有商品資料」(GET)、「新增這件商品」(POST)或是「更新那件商品的價格」(PUT)。它讓不同的系統之間可以順暢地溝通,是實現自動化的核心關鍵。

取得你的專屬鑰匙:API 金鑰的產生與權限

要使用 API,你得先證明你是「自己人」。這就需要一組 API 金鑰。

  • 步驟一: 登入你的 WordPress 後台,前往「WooCommerce」>「設定」>「進階」>「REST API」。
  • 步驟二: 點擊「新增金鑰」。
  • 步驟三: 輸入一個你好記的「描述」(例如:ERP Sync),選擇你的「使用者」,並將「權限」設定為「讀取/寫入」。
  • 步驟四: 點擊「產生 API 金鑰」。

接著畫面會顯示你的「Consumer Key」和「Consumer Secret」。工程師的小囉嗦來了:這兩組字串只會顯示這一次!請立刻把它們複製到安全的地方存好,就像你的銀行卡密碼一樣,絕對不要外洩,也別想著之後再回來看。一旦離開這個頁面,你就再也看不到完整的 Secret 了。

效能的關鍵字:用「批次處理」取代龜速迴圈

好了,基礎複習完畢,重頭戲來了。為什麼我這麼唾棄用迴圈一筆一筆更新?因為每一次 API 請求,都包含網路連線建立 (TCP handshake)、HTTP 標頭傳輸、伺服器處理請求等固定成本。假設處理一筆資料要 0.5 秒,其中有 0.3 秒是這些固定成本,那更新 1000 筆資料就要 500 秒!這還沒算上網路不穩或伺服器忙碌的狀況。

批次處理,就是把一堆要做的指令打包成一個大包裹,一次寄給伺服器。這樣一來,那 0.3 秒的固定成本就只需要支付一次,大幅提升整體效率。

揭秘 /products/batch 端點的魔力

WooCommerce 提供了一個專門用來批次處理的端點:POST /wp-json/wc/v3/products/batch。它的使用方式是,你透過 POST 方法,傳送一個 JSON 物件給它,這個物件裡面包含了三個可選的陣列:

  • create: 一個包含多個商品物件的陣列,用來新增商品。
  • update: 一個包含多個商品物件的陣列,用來更新現有商品。每個物件都必須包含 id 欄位。
  • delete: 一個包含多個商品 ID 的陣列,用來刪除商品。

實戰演練:批次更新商品價格與庫存

假設我們有個促銷活動,要把三個商品的價格和庫存做調整。如果用傳統方法,我們得發送三次 API 請求。但用批次處理,一次搞定!

以下是一個使用 PHP cURL 的範例,這在很多主機環境或後端腳本中都能直接使用:


<?php

$store_url = 'https://your-website.com';
$consumer_key = 'ck_xxxxxxxxxxxxxxxxxxxxxxxx';
$consumer_secret = 'cs_xxxxxxxxxxxxxxxxxxxxxxxx';

$batch_data = [
    'update' => [
        [
            'id' => 101, // 商品 ID
            'regular_price' => '199.00', // 更新常規價格
            'stock_quantity' => 50      // 更新庫存數量
        ],
        [
            'id' => 102,
            'regular_price' => '249.00',
            'stock_quantity' => 30
        ],
        [
            'id' => 105,
            'sale_price' => '99.00', // 也可以更新特價
            'stock_quantity' => 100
        ]
    ]
];

$api_url = $store_url . '/wp-json/wc/v3/products/batch';

$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_USERPWD, $consumer_key . ':' . $consumer_secret);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($batch_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
]);

$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($http_code == 200) {
    echo '批次更新成功!';
    print_r(json_decode($response, true));
} else {
    echo '批次更新失敗,HTTP 狀態碼:' . $http_code;
    print_r(json_decode($response, true));
}

?>

看到了嗎?我們只發送了一次請求,就把三件商品都更新完畢。如果你的 ERP 每天有上百上千筆資料要同步,這之間的效能差異就是天壤之別。

防呆比開發重要!打造永不翻車的自動化腳本

身為一個資深工程師,我必須囉嗦一句:能跑的程式不叫好程式,穩定的程式才是。 自動化腳本通常在半夜、無人看管的情況下執行,如果沒有完善的錯誤處理和日誌紀錄,一旦出錯,你可能隔天早上才會發現庫存天下大亂,那才是真正的災難。

拆解 API 回應:成功、失敗我都要知道

批次處理還有一個重點:不是所有請求都會成功。可能你更新的 100 個商品中,有 2 個因為 ID 不存在而失敗。WooCommerce API 很聰明,它會回傳一個結果陣列,讓你明確知道每一筆操作的結果。

你應該要檢查 API 的回傳值,把失敗的項目記錄下來,看是要手動處理,還是觸發警報通知,甚至可以設計一套重試機制。千萬不要傻傻地以為發送請求就代表任務完成了!

建立你的黑盒子:日誌紀錄 (Logging) 的重要性

一個沒有 Log 的自動化腳本,就像一架沒有黑盒子的飛機。出事了,你完全不知道問題在哪。一個好的同步腳本,至少應該記錄以下資訊:

  • 執行時間: 腳本何時開始與結束。
  • 請求內容: 你這次發送了哪些資料給 API。
  • API 回應: API 回傳了什麼原始資料。
  • 執行結果: 總共處理幾筆、成功幾筆、失敗幾筆。
  • 錯誤詳情: 哪些 ID 失敗了,錯誤訊息是什麼。

不要省這幾行寫 Log 的 Code,幾個月後當客戶問你「為什麼某個商品庫存不對」時,你會回來感謝現在的自己。

總結:從「能動」到「高效穩定」的思維轉變

掌握 WooCommerce 商品 API 的批次處理,不只是學會一個新端點,更重要的是一種工程思維的轉變。我們追求的不僅僅是完成功能,而是用更高效、更穩健的方式去解決問題。從單筆操作的迴圈,進化到批次處理與錯誤監控,這正是資淺與資深工程師的差異所在。

希望今天的內容,能幫助你擺脫無效的 API 呼叫地獄,打造出讓客戶滿意、也讓自己睡得安穩的自動化同步系統。

延伸閱讀

如果你在 WooCommerce API 串接、ERP 整合,或是更複雜的企業級自動化流程中遇到了瓶頸,浪花科技的團隊擁有豐富的實戰經驗,能為你量身打造最適合的解決方案。歡迎點擊這裡,填寫表單與我們聯繫,讓我們一起打造更聰明、更有效率的電商帝國!

// FAQ

常見問題

如何取得 WooCommerce 的 REST API 金鑰?
登入 WordPress 後台,前往「WooCommerce」>「設定」>「進階」>「REST API」,點擊「新增金鑰」,輸入描述、選擇使用者並將權限設為「讀取/寫入」,再點「產生 API 金鑰」即可取得 Consumer Key 與 Consumer Secret。這兩組字串只會顯示一次,請立刻複製到安全的地方保存,離開頁面後就無法再看到完整的 Secret。
為什麼 WooCommerce 批次處理比用迴圈一筆一筆呼叫 API 快很多?
每次 API 請求都包含建立網路連線、傳輸 HTTP 標頭、伺服器處理等固定成本。用迴圈逐筆更新時,這些固定成本會在每一筆都重複支付;批次處理則把多筆指令打包成一個請求一次送出,固定成本只需支付一次,因此能大幅提升整體效率。
WooCommerce 批次處理商品要用哪個 API 端點?怎麼使用?
使用 POST /wp-json/wc/v3/products/batch 端點,透過 POST 傳送一個 JSON 物件,其中可包含三個陣列:create 用來新增商品、update 用來更新現有商品(每個物件須含 id 欄位)、delete 用來刪除商品(傳入商品 ID)。一次請求即可同時處理多筆新增、更新與刪除。
批次更新商品後,要怎麼確認每一筆是否成功?
批次請求不一定全部成功,部分商品可能因 ID 不存在等原因失敗。WooCommerce API 會回傳一個結果陣列,明確標示每一筆操作的結果,因此應檢查回傳值並把失敗項目記錄下來,再決定手動處理、觸發警報或設計重試機制,切勿以為發送請求就代表任務完成。
撰寫 WooCommerce 自動化同步腳本時,日誌應該記錄哪些資訊?
自動化腳本常在無人看管時執行,完善的日誌至關重要。一個好的同步腳本至少應記錄:腳本的執行開始與結束時間、發送給 API 的請求內容、API 回傳的原始資料、總處理筆數與成功失敗數量,以及失敗項目的 ID 與錯誤訊息,以便日後追查問題。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。

$
// final.exec()

準備好讓你的網站開始為你工作了嗎?