使用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
相关产品推荐
相关产品推荐

