You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Guzzle向Ecomdash API发送JSON作为POST请求体失败如何解决?

解决Guzzle POST请求无法发送JSON到Ecomdash API的问题

我最近踩了Ecomdash API的一个小坑,正好和你遇到的问题一模一样——用Guzzle发送POST请求时,JSON体始终无法被API正确识别。折腾了好一会儿才摸清楚根源,分享下具体的解决方案:

问题核心原因

Ecomdash API对请求体的JSON格式有个特殊要求:所有JSON字符串必须用方括号包裹,模拟产品数组的格式。哪怕你只更新单个产品,也不能直接传单个对象的JSON,必须把它包装成数组形式。

具体解决步骤

  1. 多产品更新场景:直接把产品数组用json_encode()处理就行,因为数组编码后天然就是带方括号的格式,完全符合API要求。
  2. 单产品更新场景:需要手动给单个产品的JSON字符串前后加上方括号,把它转换成数组格式的JSON。
  3. 关键注意点:构建Guzzle请求时,一定要用body参数来传递处理好的JSON字符串,而不是用Guzzle自带的json参数。因为json参数会自动对数据进行编码,可能会破坏我们手动构造的格式。

可用代码示例

// 单个产品更新的情况
$singleProduct = [
    'ProductId' => 12345,
    'QuantityAvailable' => 20
];
// 手动包裹方括号,转换成数组格式JSON
$requestBody = '[' . json_encode($singleProduct) . ']';

$client = new \GuzzleHttp\Client();
$response = $client->post('https://api.ecomdash.com/your-target-endpoint', [
    'headers' => [
        'Content-Type' => 'application/json',
        'Authorization' => 'Bearer YOUR_AUTH_TOKEN' // 替换成你的API令牌
    ],
    'body' => $requestBody
]);

// 多个产品更新的情况
$multipleProducts = [
    [
        'ProductId' => 12345,
        'QuantityAvailable' => 20
    ],
    [
        'ProductId' => 67890,
        'QuantityAvailable' => 15
    ]
];
// 直接编码数组即可,自动生成带方括号的JSON
$requestBody = json_encode($multipleProducts);

$response = $client->post('https://api.ecomdash.com/your-target-endpoint', [
    'headers' => [
        'Content-Type' => 'application/json',
        'Authorization' => 'Bearer YOUR_AUTH_TOKEN'
    ],
    'body' => $requestBody
]);

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

火山引擎 最新活动