告別手動上架地獄!WooCommerce 商品 API 終極實戰,讓你的庫存、ERP 同步自動化!

2025/09/22 | API 串接與自動化, WC 開發

告別手動上架地獄!WooCommerce 商品 API 終極實戰,讓你的庫存、ERP 同步自動化!

哈囉,我是浪花科技的資深工程師 Eric。如果你正在經營一個 WooCommerce 電商網站,而且商品數量一多,每天光是手動上架、更新庫存、調整價格就搞得你一個頭兩個大,那這篇文章就是你的救贖。很多客戶來找我們的時候,常常抱怨他們的 ERP 系統跟網站庫存永遠對不起來,或是需要一次上架幾百件新品,點滑鼠點到手抽筋。

身為一個有點龜毛的工程師,我聽到這種重複性高、又容易出錯的人工作業,就覺得渾身不對勁。這根本就是應該讓程式來解決的問題啊!今天,我就要帶你深入 WooCommerce 的心臟地帶——它的 REST API,特別是商品 (Product) API 的部分。搞懂它,你就能打造出全自動的商品管理流程,把時間花在更有價值的事情上,而不是被困在無止盡的複製貼上地獄裡。好了,廢話不多說,咖啡準備好,我們開始吧!

前置作業:解鎖 WooCommerce API 的第一把鑰匙

在我們開始用程式碼大顯身手之前,得先跟 WooCommerce 說一聲:「嘿,我要用 API 跟你溝通囉!」這個「打招呼」的過程,就是啟用 API 功能並取得一組專屬的鑰匙 (API Keys)。

步驟一:啟用 REST API

首先,你得確定你的網站有開啟 API 功能。這通常是預設啟用的,但檢查一下總是好的。

  • 登入你的 WordPress 後台。
  • 前往「WooCommerce」 > 「設定(Settings)」 > 「進階(Advanced)」。
  • 切換到「REST API」分頁。
  • 點擊「新增金鑰(Add key)」。

步驟二:產生 API 金鑰 (API Keys)

這一步就像是去申請一張門禁卡,有了它,你的程式才能被 WooCommerce 系統認得。

  • 在「描述(Description)」欄位中,給這組鑰匙一個好記的名字,例如「我的 ERP 串接」或「商品自動化腳本」,這樣以後才不會忘記它是做什麼用的。
  • 在「權限(Permissions)」欄位,選擇「讀取/寫入(Read/Write)」。既然我們的目標是全自動管理,只給「讀取(Read)」權限是不夠的。
  • 點擊「產生 API 金鑰(Generate API key)」。

接下來,畫面會顯示你的「Consumer key」和「Consumer secret」。注意!這是你唯一一次能看到完整 Consumer secret 的機會! 請立刻把它們複製下來,存放在一個安全的地方(例如密碼管理器),千萬不要外洩。一旦離開這個頁面,你就再也看不到完整的 secret 了。這就像是拿到保險箱鑰匙後,不好好保管,那就只能跟裡面的寶藏說掰掰了。

驗證你的身份:API Key 的正確使用姿勢

有了鑰匙,下一步就是學習怎麼開門。WooCommerce REST API 主要支援兩種驗證方式,為了教學方便,我們先用最直觀的 URL 參數方式。這種方式是把你的 key 直接放在 API 的網址中。

一個基本的 API 請求網址會長得像這樣:

https://yourdomain.com/wp-json/wc/v3/products?consumer_key=ck_xxxxxxxxxxxxxxxxxxxxxxxx&consumer_secret=cs_xxxxxxxxxxxxxxxxxxxxxxxx

yourdomain.com 換成你的網址,ck_...cs_... 換成你剛剛拿到的金鑰。只要能成功存取這個網址並看到一堆 JSON 格式的資料,就代表你的第一步成功了!

工程師小提醒:雖然用 URL 參數很方便,但在正式的生產環境中,將金鑰放在 URL 裡可能會被伺服器日誌記錄下來,有潛在的安全風險。更安全的做法是將金鑰放在 HTTP Header 的 Authorization 欄位中進行 Basic Auth 驗證,但今天為了讓大家快速上手,我們先專注在核心功能上。

CRUD 大顯身手:用 API 完全掌控你的商品

在程式開發領域,我們常用 CRUD 來代表四種基本的資料庫操作:Create (新增)、Read (讀取)、Update (更新)、Delete (刪除)。WooCommerce 商品 API 完美地對應了這四種操作。

(GET) 讀取商品:撈資料的基本功

這是最基本也最常用的操作。你可以一次性撈取所有商品,也可以加上篩選條件來找到特定商品。

端點 (Endpoint): GET /wp-json/wc/v3/products

例如,你想看第二頁的商品,每頁顯示 20 個:

https://yourdomain.com/wp-json/wc/v3/products?per_page=20&page=2

或是,你想尋找 SKU (庫存單位) 為 `LOGO-TSHIRT` 的商品:

https://yourdomain.com/wp-json/wc/v3/products?sku=LOGO-TSHIRT

WooCommerce API 提供了非常豐富的查詢參數,像是分類、標籤、價格區間等等,幾乎所有你在後台能做的篩選,都能透過 API 參數實現。

(POST) 新增商品:從無到有,一秒上架

手動上架的惡夢就到此為止吧!透過 API,你可以用程式批次建立商品。

端點 (Endpoint): POST /wp-json/wc/v3/products

新增商品時,你需要將商品的資料以 JSON 格式放在請求的 body 中。一個最簡單的「簡單商品」範例如下:

{
  "name": "浪花科技聯名潮 T",
  "type": "simple",
  "regular_price": "699",
  "description": "一件充滿 Geek 風格的 T-shirt,穿上它,Code 寫起來都有風!",
  "short_description": "浪花科技 x TechLiker 限量聯名款。",
  "categories": [
    { "id": 9 },
    { "id": 14 }
  ],
  "images": [
    { "src": "http://example.com/tshirt.jpg" }
  ]
}

你只需要準備好這些資料,然後發送一個 POST 請求到上面的端點,商品就瞬間上架完成了!是不是很神奇?

(PUT) 更新商品:改價格、改庫存,通通自動來

當你的 ERP 系統庫存變動時,或是需要批次調整季節性商品價格時,手動一個一個改簡直是酷刑。這時候就該讓更新 API 上場了。

端點 (Endpoint): PUT /wp-json/wc/v3/products/<商品ID>

假設我們要更新商品 ID 為 799 的庫存和價格:

{
  "regular_price": "599",
  "stock_quantity": 15
}

你只需要傳送你想變更的欄位就好,不用把全部的商品資料都再傳一次。這對於同步 ERP 庫存來說,簡直是天作之合。

(DELETE) 刪除商品:下架掰掰,小心使用!

這個操作比較危險,就像是手握著核彈發射鈕,使用前請務必三思。

端點 (Endpoint): DELETE /wp-json/wc/v3/products/<商品ID>?force=true

呼叫這個端點會將商品丟到垃圾桶。如果你加上 `force=true` 參數,它就會被「永久刪除」,連資料庫都找不到屍體的那種。除非你百分之百確定,否則我強烈建議先不要加 `force=true`,讓商品先進垃圾桶,還有反悔的機會。

實戰演練:用 PHP 寫一支自動新增商品的腳本

光說不練假把戲,我們直接來寫一段 PHP 程式碼,示範如何透過 cURL 來新增一個商品。你可以把這段程式碼儲存成一個 .php 檔案,在你的伺服器上執行看看。

<?php

// 你的 WooCommerce 商店資訊
$websiteUrl = 'https://yourdomain.com';
$consumerKey = 'ck_xxxxxxxxxxxxxxxxxxxxxxxx'; // 換成你的 Consumer Key
$consumerSecret = 'cs_xxxxxxxxxxxxxxxxxxxxxxxx'; // 換成你的 Consumer Secret

// 準備要新增的商品資料
$productData = [
    'name' => 'API 自動新增商品 - 測試款',
    'type' => 'simple',
    'regular_price' => '999',
    'description' => '這是一個透過 PHP cURL 腳本自動新增的商品。',
    'stock_quantity' => 50,
    'manage_stock' => true,
];

// 設定 API 端點
$endpoint = '/wp-json/wc/v3/products';
$apiUrl = $websiteUrl . $endpoint;

// 初始化 cURL
$ch = curl_init();

// 設定 cURL 選項
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_USERPWD, $consumerKey . ":" . $consumerSecret);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($productData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
]);

// 執行請求並取得回應
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// 關閉 cURL
curl_close($ch);

// 處理回應
if ($httpcode == 201) {
    echo "商品新增成功!";
    $newProduct = json_decode($response, true);
    echo "<pre>";
    print_r($newProduct);
    echo "</pre>";
} else {
    echo "商品新增失敗,錯誤碼:" . $httpcode;
    echo "<pre>";
    print_r(json_decode($response, true));
    echo "</pre>";
}

?>

把這段程式碼中的網址和金鑰換成你自己的,然後執行它。如果一切順利,你會在你的商店後台看到一個全新的商品!這就是自動化的第一步!

工程師的囉唆時間:那些你不能不知道的 API 陷阱

API 很強大,但也藏著一些坑。身為一個踩過無數坑的工程師,我覺得有義務提醒你幾件事:

  • 變數商品 (Variable Products) 的複雜性: 我們今天示範的都是「簡單商品」。但如果你要處理有不同顏色、尺寸的「變數商品」,那會複雜得多。你除了要操作主商品 API,還需要操作 `/products/<product_id>/variations` 這個端點來管理各個款式,這需要更縝密的邏輯。
  • 速率限制 (Rate Limiting): 如果你短時間內發送大量請求(例如一次同步幾千個商品),你的主機或防火牆(如 Cloudflare)可能會把你當成惡意攻擊,暫時封鎖你的 IP。在批次處理時,最好在每次請求之間加上一點點延遲(例如 0.5 秒),當個有禮貌的 API 使用者。
  • 資料驗證 (Data Validation): API 不會幫你檢查你的價格是不是打錯了、SKU 是不是重複了。在你的程式發送請求之前,一定要做好完善的資料驗證,不然垃圾進,垃圾出,最後還是要自己手動收拾殘局。
  • 非同步處理 (Asynchronous Processing): 對於需要長時間運行的任務,例如同步上萬筆商品,絕對不要在一次網頁請求中完成,這會導致請求超時。更好的做法是將任務放進佇列 (Queue) 中,透過背景任務 (例如 WP-Cron 或伺服器的 Cron Job) 逐批處理,確保穩定性。

掌握 WooCommerce 商品 API 是解放你電商管理生產力的關鍵。從簡單的庫存同步,到複雜的客製化儀表板,甚至是串接 PIM (產品資訊管理) 系統,都建立在這基礎之上。希望今天的教學能為你打開一扇通往自動化世界的大門。

相關閱讀

需要更進階的 WooCommerce 整合或自動化嗎?

今天的教學只是一個開始。如果你需要將 WooCommerce 與你的 ERP、CRM 系統進行更深度的雙向同步,或是想打造更複雜的自動化流程,卻不知從何下手,浪花科技的團隊擁有豐富的 API 串接與電商客製化開發經驗。

我們能協助你規劃並實作出最符合你商業邏輯的自動化解決方案,讓你從繁瑣的日常營運中解放出來。歡迎點擊這裡填寫表單,與我們的技術顧問聊聊你的需求!

常見問題 (FAQ)

Q1: WooCommerce REST API 主要是用來做什麼的?

A1: 它的核心用途是「自動化」。你可以透過 API 讓其他系統(如 ERP、CRM、手機 App 或任何客製化腳本)能夠以程式化的方式讀取、新增、修改或刪除你網站上的資料,例如商品、訂單、顧客等,而不需要手動登入後台操作。這對於批次處理、系統整合與資料同步非常有幫助。

Q2: 使用 API 金鑰安全嗎?會不會有外洩的風險?

A2: 只要你妥善保管,API 金鑰是安全的。關鍵在於:1. 不要將金鑰(特別是 Consumer Secret)寫死在前端 JavaScript 程式碼中,因為這會暴露給所有人。2. 只在可信的後端伺服器環境中使用。3. 為不同的應用程式產生不同的金鑰,並給予它們最小的必要權限(例如,如果某個應用程式只需要讀取訂單,就只給它「讀取」權限)。4. 如果懷疑金鑰外洩,應立即到後台將其作廢並重新產生。

Q3: 我可以用這個 API 管理有不同顏色、尺寸的「變數商品」嗎?

A3: 絕對可以,但會比處理「簡單商品」複雜一些。你需要分兩步走:首先,透過 `POST /products` 建立一個 `type` 為 `variable` 的主商品,並定義好屬性(例如「顏色」、「尺寸」)。接著,再透過 `POST /products/<主商品ID>/variations` 這個端點,逐一新增每個具體的款式(例如「紅色-L」、「藍色-M」),並為每個款式設定獨立的 SKU、價格和庫存。

 
立即諮詢,索取免費1年網站保固