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

如何使用PHP的file_get_contents()发起Shopify REST API POST请求

问题原因&修复方案

你代码里有三处核心错误,全部修改后即可正常请求:

    1. 请求体格式与声明的Content-Type不匹配:你设置了Content-Type: application/json,但却用http_build_query()将参数转为表单格式,Shopify API无法识别该格式,需要替换为json_encode()序列化参数。
    1. 请求头换行符书写错误:Content-Length行末尾的换行符你写成了rn,缺失转义符,正确格式为\r\n,畸形请求头会直接被服务端拦截。
    1. 流上下文配置键错误:PHP中无论发送HTTP还是HTTPS请求,流上下文的配置根键都是http而非https,你之前写的https配置完全没有生效,相当于还是发送了默认的GET请求。

修复后的完整代码如下:

// 正确序列化为JSON格式参数
$postdata = json_encode(
    array(
        'location_id' => $locationID,
        'inventory_item_id' => $itemID,
        'inventory_adjustment' => 99
    )
);
        
$opts = array('http' => // 配置根键改为http
    array(
        'method'  => 'POST',
        'header'  => "Content-Type: application/json\r\n" .
                     "Accept: application/json\r\n" .
                     "Content-Length: " . strlen($postdata) . "\r\n", // 修复换行符
        'content' => $postdata,
        'ignore_errors' => true // 可选配置:开启后即使接口返回4xx/5xx错误也能拿到响应内容,方便排查问题
    )
);
        
$context  = stream_context_create($opts);
        
$result = file_get_contents('https://' . API_key() . ':' . API_password() . '@' . $store . '.myshopify.com/admin/api/2021-04/inventory_levels/adjust.json', false, $context);
$resData = json_decode($result, true);
if ($result) {
    var_dump($resData);
} else {
    // 调试阶段可以打印具体错误信息定位问题
    var_dump(error_get_last());
    echo "post failed<br>";
}

如果修改后仍然报错,可先保留ignore_errors配置,打印完整的接口返回内容,就能看到Shopify返回的具体错误原因,比如权限不足、参数值非法等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 05:15:06