我试图弄清楚如何向沃尔玛的更新批量库存 POST 端点发送成功的请求。
这有点令人困惑,因为内容类型格式是 multipart/form-data 这意味着用户需要提供文件。但是对于我的用例来说这是不可能的,因为我只有一个 JS 对象可以使用。
但是查看 Walmart 的文档显示了一个以 JSON 格式发送的示例请求,因此我采用了以下方法:
const jsonData = JSON.stringify({
InventoryHeader: {
version: '1.4',
},
Inventory: walmartData.inventory_items.reduce(
(acc, { sku, quantity }) => {
acc.push({
sku: encodeSku(sku),
quantity,
});
return acc;
},
[],
),
});
const data = new FormData();
data.append('json', jsonData);
const needleOpts = {
headers: {
...data.getHeaders(),
...buildHeaders(), // builds auth headers
},
};
const queryObject = {
feedType: 'inventory',
shipNode: 'xyz,
};
const query = queryString.stringify(queryObject, {
encode: false,
arrayFormat: 'bracket',
});
const url = `https://sandbox.walmartapis.com/v3/feeds?${query}`;
const result = await needle('post', url, data, needleOpts);
return result.body;
问题是我得到了一个 feedId,它表明响应是成功的,但是当我尝试获取 feed 时,我得到了以下错误:
{
"feedId": "3DD1DE30885E45BA8EB1CBFC94A41FEA@AQkBAQA",
"feedStatus": "ERROR",
"shipNode": null,
"submittedBy": null,
"ingestionErrors": {
"ingestionError": [
{
"type": "SYSTEM_ERROR",
"code": "PDR-0014",
"field": null,
"description": "INTERNAL SERVER ERROR"
}
]
},
"itemsReceived": 0,
"itemsSucceeded": 0,
"itemsFailed": 0,
"itemsProcessing": 0,
"offset": 0,
"limit": 50,
"itemDetails": {
"itemIngestionStatus": []
},
"additionalAttributes": null
}
此外,当我尝试获取所有库存提要时,我会返回以下内容:
{
"totalResults": 0,
"offset": 0,
"limit": 50,
"results": {
"feed": null
}
}
这告诉我没有创建库存提要。
据我所知,我的代码看起来还不错,但我不明白为什么没有创建提要,还要注意,API 是沙盒这一事实不应该有所作为。
有没有人对此 API 有任何经验,特别是使用 JSON 发送请求?JSON 对象应该是文件格式吗?
任何想法,将不胜感激。