You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中遍历Ecwid API返回的JSON数组并输出商品SKU

如何在PHP中遍历Ecwid API返回的JSON数组并输出商品SKU

我看了你的代码和问题描述,你现在遇到的问题主要是没正确解析API返回的JSON数据,还有foreach的语法错误,我来帮你一步步修正:

问题分析

  1. 没有解析JSON响应:你用$response->getBody()拿到的其实是JSON格式的字符串,不是PHP能直接遍历的数组/对象,必须先解码。
  2. foreach语法错误:PHP里foreach的正确写法是foreach ($数组 as $单个元素),你写成了foreach ($items in $response),这是语法错误,而且也没定位到正确的商品数组。
  3. 未定位到items字段:Ecwid API返回的JSON里,商品列表是嵌套在顶层的items数组里的,你需要先拿到这个数组再遍历。

修正后的完整代码

require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

try {
    $response = $client->request('GET', 'https://app.ecwid.com/api/v3/83672989/products', [
        'headers' => [
            'Authorization' => 'Bearer secret_XYZ',
            'accept' => 'application/json',
        ],
    ]);

    // 1. 获取JSON字符串并解析为PHP关联数组
    $jsonBody = $response->getBody()->getContents();
    $productData = json_decode($jsonBody, true);

    // 2. 检查是否存在items数组,避免报错
    if (isset($productData['items']) && is_array($productData['items'])) {
        // 3. 遍历每个商品
        foreach ($productData['items'] as $product) {
            // 输出SKU,用esc_html防止XSS,适合WordPress场景
            echo esc_html($product['sku']) . '<br>';
        }
    } else {
        echo '未获取到商品数据';
    }
} catch (\GuzzleHttp\Exception\RequestException $e) {
    // 捕获请求异常,比如API调用失败的情况
    echo 'API请求失败:' . esc_html($e->getMessage());
}

额外说明

  • 加了try-catch块:处理API请求可能出现的错误(比如网络问题、权限错误),避免页面直接崩溃。
  • 使用esc_html():在WordPress中输出用户数据时,一定要用这个函数转义,防止跨站脚本攻击(XSS),尤其是当SKU包含特殊字符的时候。
  • json_decode($jsonBody, true):第二个参数传true会把JSON对象转成PHP关联数组,如果你习惯用对象,也可以去掉这个参数,然后用$product->sku来访问。

备注:内容来源于stack exchange,提问作者Ines Zarka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:57:39