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

使用Shopify API PHP添加商品:价格与图片未生效的数组问题排查

问题诊断与修复方案

嘿,我帮你排查出了核心问题,主要集中在请求格式和参数细节上,一步步来解决:

1. 最关键的问题:请求体编码格式错误

Shopify的REST API要求POST/PUT请求的主体必须是JSON格式,但你的代码里把请求数组用http_build_query()转成了URL编码格式(比如product[title]=TITLE&product[variants][0][price]=1160),这种格式和API的要求不匹配,导致价格、图片这类嵌套字段无法被正确解析。

看你代码里这段有问题的逻辑:

if ($method != 'GET' && in_array($method, array('POST', 'PUT'))) {
    if (is_array($query)) $query = http_build_query($query);
    curl_setopt ($curl, CURLOPT_POSTFIELDS, $query);
}

这里应该把数组转成JSON字符串,而不是URL编码。

2. 缺少必要的请求头

发送JSON数据时,必须在请求头里声明Content-Type: application/json,否则Shopify无法识别请求体的格式,自然也解析不了里面的价格和图片字段。

3. 可选的参数细节优化

  • 价格字段price建议传字符串类型(比如"1160.00"),虽然Shopify也接受数字,但字符串能避免浮点数精度问题;
  • 图片的src必须是公开可访问的HTTPS链接,如果是HTTP链接或者本地路径,Shopify会拒绝抓取图片。

修复后的代码调整

把你的shopify_call函数里的请求头和POST/PUT处理部分修改如下:

// Setup headers
$request_headers[] = "";
if (!is_null($token)) {
    $request_headers[] = "X-Shopify-Access-Token: " . $token;
}
// 添加JSON格式的Content-Type头
if (in_array($method, array('POST', 'PUT'))) {
    $request_headers[] = "Content-Type: application/json";
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $request_headers);

if ($method != 'GET' && in_array($method, array('POST', 'PUT'))) {
    // 将数组转为JSON字符串,替代URL编码
    if (is_array($query)) {
        $query = json_encode($query);
    }
    curl_setopt ($curl, CURLOPT_POSTFIELDS, $query);
}

验证你的请求数组

确保你的$query数组结构正确,补充细节优化:

$query = array(
    'product' => array(
        'title' => 'TITLE',
        'body_html' => '<p><strong>DESCRIPTION</strong></p>',
        'vendor' => 'TESTSTORE',
        'product_type' => '',
        'tags' => '',
        'published' => 1,
        'variants' => array(
            array(
                'price' => '1160.00' // 用字符串格式更稳妥
            )
        ),
        'images' => array(
            array('src' => 'https://yourdomain.com/urlofimage.jpg'), // 必须是HTTPS公开链接
            array('src' => 'https://yourdomain.com/urlofimage2.jpg')
        )
    )
);

调试小技巧

修改后可以先打印json_encode($query)的结果,确认JSON格式正确;如果还有问题,直接print_r($response)查看Shopify返回的错误信息——Shopify的错误响应会明确告诉你哪个字段不符合要求,非常好排查。

内容的提问来源于stack exchange,提问作者Ako Si

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:35:36