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 字段名可能是 qtyquantity 等,不要照搬本文示例里的 stock,以对方接口文档为准。

六、效果验证方法

同步是否真正生效,建议做三步验证:

  1. 先在第三方系统手动修改某个商品的库存数字。
  2. 等待定时任务执行,或手动运行脚本。
  3. 打开 WooCommerce 商品编辑页,查看“库存数量”是否变成你修改后的值。

如果同步成功,说明整个链路是通的。
后续可以观察日志,确认脚本长期稳定运行。

WooCommerce 对接第三方 API 做库存自动同步,本质就是“读接口、解析数据、写回商品字段”三个动作。
只要 SKU 对应关系正确、鉴权方式没问题,再用定时任务控制执行频率,就能大幅减少人工操作。
遇到报错时,优先看脚本日志和接口返回码,再检查参数格式,一般都能快速解决。

分享到:
上一篇
WordPress迁移服务器完整流程
下一篇
WordPress xmlrpc暴力攻击防护
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意