【发布时间】:2020-05-15 14:52:18
【问题描述】:
我正在尝试弄清楚如何向沃尔玛的更新批量库存 POST 端点发送成功的请求。
这有点令人困惑,因为 content-type 格式是 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
}
}
这告诉我没有创建库存 Feed。
据我所知,我的代码看起来还不错,但我不明白为什么没有创建提要,还要注意的是,API 是沙盒这一事实不应该有所作为。
是否有人对此 API 有任何经验,尤其是使用 JSON 发送请求? JSON 对象应该是文件格式吗?
任何想法都将不胜感激。
【问题讨论】:
-
文档指定您需要将有效负载放入文件中并使用 multipart/form-data 上传文件。我已经添加了一个答案,所以试试看是否有效。
标签: javascript json api multipartform-data walmart-api