WooCommerce对接第三方API库存
很多独立站卖家在 WooCommerce 后台手动改库存,商品一多就容易漏改、延迟,甚至导致超卖。
本文会从零基础可操作的角度,介绍如何把第三方系统的库存通过 API 拉到 WooCommerce,并用定时脚本自动更新商品库存。
读完你能得到一套可运行的同步脚本思路、服务器定时任务配置方法和常见报错排查清单。
一、对接前先确认这三件事
动手写代码之前,先确认基础设施是否齐全:
- API 权限:第三方接口是否提供库存字段,使用 Token、Key 还是 OAuth 认证,是否有请求频率限制。
- SKU 是否一致:WooCommerce 商品和第三方系统必须都有唯一 SKU,且能一一对应。如果没有统一 SKU,后续映射会非常麻烦。
- 服务器环境:PHP 版本建议 7.4 以上,确认 cURL 扩展已开启,且服务器能访问第三方 API 的域名。
建议先在本地或测试环境调用一次第三方接口,确认返回 JSON 结构。
例如常见的返回格式:
[{"sku":"ABC123","stock":10}]
拿到真实返回结构后再写解析代码,能少走很多弯路。
二、用 PHP 脚本读取第三方库存
核心思路是用 cURL 请求第三方 API,解析拿到 SKU 和库存数值,再循环处理。
下面是一个简单的示例:
$apiUrl = 'https://third-party.example.com/api/stock';
$apiKey = getenv('THIRD_PARTY_API_KEY');
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $apiKey,
]);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
if (curl_errno($ch)) {
// 写入日志,方便排查
error_log('API request failed: ' . curl_error($ch));
exit(1);
}
curl_close($ch);
$products = json_decode($response, true);
foreach ($products as $item) {
$sku = $item['sku'];
$stock = (int) $item['stock'];
// 下面调用 WooCommerce REST API 更新库存
}
注意:不要把密钥硬编码在脚本里,建议用环境变量或独立配置文件,避免泄露。
三、把库存更新到 WooCommerce
WooCommerce 提供了 REST API,可以通过 SKU 查找商品 ID,再更新 stock_quantity 字段。
参考脚本片段:
$consumerKey = getenv('WC_CONSUMER_KEY');
$consumerSecret = getenv('WC_CONSUMER_SECRET');
// 根据 SKU 查询商品
$searchUrl = home_url('/wp-json/wc/v3/products');
$args = [
'sku' => $sku,
'consumer_key' => $consumerKey,
'consumer_secret' => $consumerSecret,
];
$productData = file_get_contents($searchUrl . '?' . http_build_query($args));
$productJson = json_decode($productData, true);
if (empty($productJson)) {
error_log("SKU not found: {$sku}");
continue;
}
$productId = $productJson[0]['id'];
// 更新库存
$updateUrl = home_url("/wp-json/wc/v3/products/{$productId}");
$updateArgs = [
'stock_quantity' => $stock,
'manage_stock' => true,
];
$ch = curl_init($updateUrl);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($updateArgs));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $consumerKey . ':' . $consumerSecret);
curl_exec($ch);
curl_close($ch);
如果商品关闭了库存管理,即使更新 stock_quantity 也不会生效,所以 manage_stock 要同时设为 true。
四、用服务器定时任务自动执行
脚本写好后,先手动执行一次:
php /path/to/sync-stock.php
确认没有报错、库存已经变化后,再配置定时任务。
Linux 系统使用 crontab:
crontab -e
添加一行,每 10 分钟同步一次:
*/10 * * * * php /path/to/sync-stock.php >> /path/to/sync-stock.log 2>&1
如果用的是宝塔面板,可以在“计划任务”中添加 Shell 脚本,执行同样的 PHP 命令。
定时任务跑起来后,建议第二天查看日志和 WooCommerce 后台,确认库存确实在自动变化。
五、常见报错与避坑建议
- API 请求超时:第三方接口偶尔变慢,脚本会一直卡住。建议设置
CURLOPT_TIMEOUT为 30 秒,并加入重试机制。 - SKU 找不到:如果第三方系统有商品而 WooCommerce 没有,脚本会跳过或报错。可以提前在日志里记录,并定期核对两边商品列表。
- 库存互相覆盖:如果运营人员也在后台手改库存,定时任务可能会把你改的值覆盖掉。必须明确同步方向:是第三方库存为准,还是后台手动值为准。不要让两边同时写同一个字段。
- 日志非常重要:每次同步至少记录时间、成功数量和失败原因。没有日志,以后出了问题很难定位。
另外提醒一点,第三方 API 字段名可能是 qty、quantity 等,不要照搬本文示例里的 stock,以对方接口文档为准。
六、效果验证方法
同步是否真正生效,建议做三步验证:
- 先在第三方系统手动修改某个商品的库存数字。
- 等待定时任务执行,或手动运行脚本。
- 打开 WooCommerce 商品编辑页,查看“库存数量”是否变成你修改后的值。
如果同步成功,说明整个链路是通的。
后续可以观察日志,确认脚本长期稳定运行。
WooCommerce 对接第三方 API 做库存自动同步,本质就是“读接口、解析数据、写回商品字段”三个动作。
只要 SKU 对应关系正确、鉴权方式没问题,再用定时任务控制执行频率,就能大幅减少人工操作。
遇到报错时,优先看脚本日志和接口返回码,再检查参数格式,一般都能快速解决。