我能够成功地对其他 Walmart API 端点(特别是 GET 请求端点)进行 API 调用,但是批量项目端点(POST 请求)会导致错误,即使我似乎一切都正确。
这是对该端点的引用 https://developer.walmartapis.com/#bulk-createupdate-items
HTTP 响应元信息
500内部服务器错误
xml
HTTP 响应
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:errors xmlns:ns2="http://walmart.com/">
<ns2:error>
<ns2:code>SYSTEM_ERROR.GMP_GATEWAY_API</ns2:code>
<ns2:description>Couldn't determine the boundary from the message!</ns2:description>
<ns2:info>System encountered some internal error.</ns2:info>
<ns2:severity>ERROR</ns2:severity>
<ns2:category>DATA</ns2:category>
<ns2:causes/>
<ns2:errorIdentifiers/>
</ns2:error>
</ns2:errors>
HTTP 请求:
网址 https://marketplace.walmartapis.com/v2/feeds?feedType=item
方法POST
请求标头
WM_SVC.NAME: Walmart Marketplace
WM_CONSUMER.ID: {my consumer id key}
WM_QOS.CORRELATION_ID: {my arbitrary text key}
Content-Type: multipart/form-data
Accept: application/xml
WM_SEC.AUTH_SIGNATURE:{my jar-file-generated key}
WM_SEC.TIMESTAMP:{my jar-file-generated timestamp}
POST 有效负载(只是文本,没有参数的键)
<?xml version="1.0" encoding="UTF-8"?>
<MPItemFeed xmlns="http://walmart.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://walmart.com/ MPItem.xsd ">
<MPItemFeedHeader>
<version>2.1</version>
<requestId>qqq</requestId>
<requestBatchId>qqq1</requestBatchId>
</MPItemFeedHeader>
<MPItem>
<sku>qqq</sku>
<Product>
<productName>QQQ 1-Foot S-Video Male to 2 S-Video Female Y Cable (CSV2F)</productName>
<longDescription><![CDATA[<div class="productDescriptionWrapper"> QVS Premium S-Video Mini4 Male to Two Female Splitter Cable CSV2F A/V Device Cables <div class="emptyClear">
</div>
</div>]]></longDescription>
<shelfDescription><![CDATA[QVS 1-Foot S-Video Male to 2 S-Video Female Y Cable (CSV2F)]]></shelfDescription>
<shortDescription>QQQ 1-Foot S-Video Male to 2 S-Video Female Y Cable (CSV2F)</shortDescription>
<mainImage>
<mainImageUrl>http://images.antonline.com/img-main/500/037229400328.jpg</mainImageUrl>
</mainImage>
<productIdentifiers>
<productIdentifier>
<productIdType>Item ID</productIdType>
<productId>46817049</productId>
</productIdentifier>
</productIdentifiers>
<productTaxCode>2038710</productTaxCode>
<Electronics>
<brand>QQQ</brand>
<ElectronicsCables>
</ElectronicsCables>
</Electronics>
</Product>
<price>
<currency>USD</currency>
<amount>12.34</amount>
</price>
<shippingWeight>
<value>1.234</value>
<unit>LB</unit>
</shippingWeight>
</MPItem>
</MPItemFeed>
笔记:
在发出 http 请求时,我尝试使用 Google 的 Advanced REST Client Application 和 POSTMAN,以排除源自我的代码的问题。
我已经尝试调整所有想到的东西。
我让其他端点有 GET 请求工作,所以我知道这不是身份验证、IP、防火墙或类似的问题。
我知道由 walmart 提供的 jar 文件生成的凭据(请参阅文档https://developer.walmartapis.com/#jar-executable-recommended的身份验证部分)必须提供您发送到的 url。所以我知道这不是使用 jar 文件生成错误密钥的问题。
假设:
- 根据响应,我发送的数据或标头一定有问题。
无法从消息中确定边界!
听起来 xml 没有平衡标签,但我已经验证了这个 xml
- 此端点的 walmart api 文档说要使用 header
Content-Type: multipart/form-data;
。所以我做了,导致失败响应。
但是使用这个标头对我来说似乎没有意义,因为有效负载正文是一个 xml 字符串。不应该Content-Type: application/xml
吗?我也试过了,但是上面的响应失败了(500,SYSTEM_ERROR.GMP_GATEWAY_API,无法从消息中确定边界!)
所以似乎Content-Type: application/xml
可以排除。
- walmart api 文档仅提供了如何更改产品 id 或 sku 的示例,而不是用于创建的示例。我假设我只是省略了特定于更新产品 id 或 sku 的 xml 标记,但该 xml 有效负载也会导致 500 响应。
我没有想法,还有其他人可以批量创建/更新项目吗?任何人都有实际工作的示例代码?