如何在PHP中遍历Ecwid API返回的JSON数组并输出商品SKU
如何在PHP中遍历Ecwid API返回的JSON数组并输出商品SKU
我看了你的代码和问题描述,你现在遇到的问题主要是没正确解析API返回的JSON数据,还有foreach的语法错误,我来帮你一步步修正:
问题分析
- 没有解析JSON响应:你用
$response->getBody()拿到的其实是JSON格式的字符串,不是PHP能直接遍历的数组/对象,必须先解码。 - foreach语法错误:PHP里foreach的正确写法是
foreach ($数组 as $单个元素),你写成了foreach ($items in $response),这是语法错误,而且也没定位到正确的商品数组。 - 未定位到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
相关产品推荐
相关产品推荐

