Walmart API - 有效负载mime类型问题 - 批量创建/更新项目无效

ahn*_*cad 5 http-post walmart-api

我能够成功地对其他Walmart API端点进行API调用(特别是GET请求端点),但是批量项端点(POST请求)会导致错误,即使我似乎一切都正确.

以下是对该端点的引用 https://developer.walmartapis.com/#bulk-createupdate-items


HTTP响应META信息

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>
Run Code Online (Sandbox Code Playgroud)

HTTP请求:

url 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}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

笔记:

在发出http请求时,我尝试使用Google的高级REST客户端应用程序以及POSTMAN,以排除源自我的代码的问题.

我试过调整想到的一切.

我有其他端点有GET请求工作,所以我知道它不是身份验证,IP,防火墙或类似的问题.

我知道由walmart提供的jar文件生成的凭据(请参阅文档https://developer.walmartapis.com/#jar-executable-recommended的身份验证部分)必须提供您要发送到的URL.所以我知道这不是用jar文件生成错误密钥的问题.


假设:

  • 根据响应,我发送的数据或标题必定​​有问题.

无法确定消息的边界!

听起来像xml没有平衡标签,但我已经验证了这个xml

  • 此端点的walmart api文档说使用标头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响应.

我没有想法,有没有其他人获得批量创建/更新项目工作?任何人都有实际工作的示例代码?

Sha*_*eOH 3

如果有人使用 PHP 遇到这个问题,并且即使在尝试了 OP 的解决方案后仍然遇到问题(例如,带有消息“无法确定消息的边界! ”或“系统遇到一些内部错误”的500响应,您可以使用 cURL 来通过作为数组传递自动为您处理边界,如下所示:CURLOPT_POSTFIELDS

curl_setopt($c, CURLOPT_POSTFIELDS, ['file' => $xml]);
Run Code Online (Sandbox Code Playgroud)