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

使用PHP的CURL为Shopify添加产品图片时遇Cloudflare错误

Shopify产品图片添加请求错误(Cloudflare 1020/BAD REQUEST)修复方案

问题背景

参考Shopify Admin REST API 2022-07版本接口添加产品图片,CURL CLI示例可正常运行,但PHP代码触发Cloudflare的"1020"及"BAD REQUEST"错误,核心原因是请求格式存在多处错误。

原代码的关键错误点

  • HTTP头被覆盖:两次调用curl_setopt($ch, CURLOPT_HTTPHEADER),第二次会完全覆盖第一次设置,导致Content-Type头丢失,请求格式不被识别。
  • 请求方法冲突:API要求使用POST方法,但代码同时设置了CURLOPT_PUT和CURLOPT_POSTFIELDS,方法逻辑混乱。
  • 错误修改请求URL:代码中把请求URL替换为图片地址,完全偏离Shopify的API端点。
  • 错误使用CURLOPT_INFILE:该参数用于本地文件上传,不能直接填写远程图片URL,且当前场景无需使用此参数(Shopify支持通过src字段传入远程图片地址)。
  • JSON语法错误:手动拼接的JSON字符串中,'1'使用单引号包裹数字,不符合JSON规范。

修正后的PHP代码

$shopifyApiUrl = "https://STORENAME.myshopify.com/admin/api/2022-07/products/632910392/images.json";
$accessToken = "SECRETTOKEN";
$imageSource = "http://example.com/rails_logo.gif";

// 初始化CURL请求
$ch = curl_init($shopifyApiUrl);

// 一次性设置所有HTTP头,避免覆盖
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "X-Shopify-Access-Token: {$accessToken}"
]);

// 配置基础请求参数
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true); // 使用API要求的POST方法

// 用json_encode构造合法JSON,避免手动拼接错误
$postData = json_encode([
    "image" => [
        "position" => 1,
        "src" => $imageSource
    ]
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

// 执行请求并获取响应
$response = curl_exec($ch);

// 可选:检查CURL执行错误
if (curl_errno($ch)) {
    echo "CURL执行错误: " . curl_error($ch);
}

curl_close($ch);

// 输出响应结果用于调试
print_r($response);

额外注意事项

  • 确保将STORENAME和SECRETTOKEN替换为实际的店铺名称和有效的访问令牌。
  • 使用json_encode生成JSON数据,可彻底避免手动拼接的语法问题,保证格式符合API要求。
  • Cloudflare 1020错误本质是请求不符合Shopify的API规范,修正上述错误后即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:54:14