Walmart Seller API v4.2 Bulk Item Setup接口调用返回Malformed data错误
问题排查与修复方案
核心错误原因
- 上传文件时未指定合法文件名:调用
formData.append('file', file)时,没有传入第三个参数指定文件名及.json后缀,沃尔玛后端需要通过后缀识别文件格式,缺少该参数会导致解析器无法正确读取内容,触发空指针异常。 - 请求头配置冲突:手动设置了
Content-Type: application/json,虽然后续formData.getHeaders()返回的multipart类型会覆盖该值,但冗余配置容易引发不可预期的解析错误。 - 直接传JSON请求体的方案不符合接口规范:沃尔玛Bulk Item Setup接口仅支持multipart/form-data格式的文件上传,直接传JSON请求体的方式即便能拿到feedId,后端也无法正常解析内容。
修复后的代码示例
async createFeed(wdpId, wdpSecret, accessToken, feedsData) { try { const jsonString = JSON.stringify(feedsData); const fileBuffer = Buffer.from(jsonString); const formData = new FormData(); // 新增第三个参数指定json文件名,必须带.json后缀 formData.append('file', fileBuffer, { filename: 'wfs-item-feed.json' }); const baseToken = WalmartService.getBaseAuthToken(wdpId, wdpSecret); const options = { params: { feedType: 'MP_WFS_ITEM', }, headers: { Authorization: baseToken, 'WM_SEC.ACCESS_TOKEN': accessToken, 'WM_QOS.CORRELATION_ID': uuidv4(), 'WM_SVC.NAME': 'Walmart Marketplace', Accept: 'application/json', // 删掉手动设置的Content-Type,直接用formData生成的header ...formData.getHeaders(), }, }; return axios .post(`${process.env.WALMART_API_BASEURL}/feeds`, formData, options) .then((response) => { return response.data; }) .catch((error) => { console.error(error.message); throw new BadRequestException('Walmart error, ', error.message); }); } catch (error) { throw new BadRequestException('Can not create listing'); } }
额外校验建议
- 提前校验
feedsData的结构完全符合沃尔玛MP_WFS_ITEM类型的JSON Schema要求,没有缺失必填字段、字段格式错误等问题 - 可以先把生成的JSON文件手动上传到沃尔玛卖家中心的Feed上传入口,验证文件本身没有格式错误,排除内容问题
内容的提问来源于stack exchange,提问作者Festive MUXAUJL
相关产品推荐
相关产品推荐

