【问题标题】:What should my feed look like when using Amazon MWS?使用亚马逊 MWS 时,我的 Feed 应该是什么样子?
【发布时间】:2015-02-18 20:09:35
【问题描述】:

我正在尝试使用 MWS 实现一种基于内部酿造的 php 将产品上传到我的亚马逊市场的方式。

我浏览了这些示例,并认为在成功的消息和 FeedSubmissionID 的情况下我走在了正确的轨道上,但事实并非如此,MWS 会告诉您您已经成功完成了 SubmitFeed,即使您确实没有。

我的问题与当我尝试更新我的库存时我的 $feed 变量究竟应该是什么样子有关。根据亚马逊 MWS 发现 here

代码

这是SubmitFeedSample.php 的精简版。 我的 AWS_ACCESS_etc.. 在我的 .config.inc.php 中,它在一开始就包含了一次。几乎可以肯定这一切都很好,因为我得到了成功的响应。

include_once ('.config.inc.php');

$serviceUrl = "https://mws.amazonservices.com";

$config = array (
  'ServiceURL' => $serviceUrl,
  'ProxyHost' => null,
  'ProxyPort' => -1,
  'MaxErrorRetry' => 3,
);

 $service = new MarketplaceWebService_Client(
     AWS_ACCESS_KEY_ID,
     AWS_SECRET_ACCESS_KEY,
     $config,
     APPLICATION_NAME,
     APPLICATION_VERSION);

$feed = '
<?xml version="1.0" ?>
<AmazonEnvelope xsi:noNamespaceSchemaLocation="amzn-envelope.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>A2EUQ1WTGCTBG2</MerchantIdentifier>
</Header>
<MessageType>Inventory</MessageType>
<Message>
    <MessageID>1</MessageID>
    <OperationType>Update</OperationType>
    <Inventory>
        <SKU>424271</SKU>
        <Quantity>8</Quantity>
    </Inventory>
</Message>
</AmazonEnvelope>
';

$marketplaceIdArray = array("Id" => array('ATVPDKIKX0DER'));

$feedHandle = @fopen('php://temp', 'rw+');
fwrite($feedHandle, $feed);
rewind($feedHandle);

$parameters = array (
  'Merchant' => MERCHANT_ID,
  'MarketplaceIdList' => $marketplaceIdArray,
  'FeedType' => '_POST_INVENTORY_AVAILABILITY_DATA_',
  'FeedContent' => $feedHandle,
  'PurgeAndReplace' => false,
  'ContentMd5' => base64_encode(md5(stream_get_contents($feedHandle), true)),
  //'MWSAuthToken' => '<MWS Auth Token>', // Optional
);

rewind($feedHandle);

$request = new MarketplaceWebService_Model_SubmitFeedRequest($parameters);

invokeSubmitFeed($service, $request);

@fclose($feedHandle);

  function invokeSubmitFeed(MarketplaceWebService_Interface $service, $request)
  {
      try {
              $response = $service->submitFeed($request);
                echo ("Service Response\n");
                echo ("=============================================================================\n");

                echo("        SubmitFeedResponse\n");
                if ($response->isSetSubmitFeedResult()) {
                    echo("            SubmitFeedResult\n");
                    $submitFeedResult = $response->getSubmitFeedResult();
                    if ($submitFeedResult->isSetFeedSubmissionInfo()) {
                        echo("                FeedSubmissionInfo\n");
                        $feedSubmissionInfo = $submitFeedResult->getFeedSubmissionInfo();
                        if ($feedSubmissionInfo->isSetFeedSubmissionId())
                        {
                            echo("                    FeedSubmissionId\n");
                            echo("                        " . $feedSubmissionInfo->getFeedSubmissionId() . "\n");
                        }
                        if ($feedSubmissionInfo->isSetFeedType())
                        {
                            echo("                    FeedType\n");
                            echo("                        " . $feedSubmissionInfo->getFeedType() . "\n");
                        }
                        if ($feedSubmissionInfo->isSetSubmittedDate())
                        {
                            echo("                    SubmittedDate\n");
                            echo("                        " . $feedSubmissionInfo->getSubmittedDate()->format(DATE_FORMAT) . "\n");
                        }
                        if ($feedSubmissionInfo->isSetFeedProcessingStatus())
                        {
                            echo("                    FeedProcessingStatus\n");
                            echo("                        " . $feedSubmissionInfo->getFeedProcessingStatus() . "\n");
                        }
                        if ($feedSubmissionInfo->isSetStartedProcessingDate())
                        {
                            echo("                    StartedProcessingDate\n");
                            echo("                        " . $feedSubmissionInfo->getStartedProcessingDate()->format(DATE_FORMAT) . "\n");
                        }
                        if ($feedSubmissionInfo->isSetCompletedProcessingDate())
                        {
                            echo("                    CompletedProcessingDate\n");
                            echo("                        " . $feedSubmissionInfo->getCompletedProcessingDate()->format(DATE_FORMAT) . "\n");
                        }
                    }
                }
                if ($response->isSetResponseMetadata()) {
                    echo("            ResponseMetadata\n");
                    $responseMetadata = $response->getResponseMetadata();
                    if ($responseMetadata->isSetRequestId())
                    {
                        echo("                RequestId\n");
                        echo("                    " . $responseMetadata->getRequestId() . "\n");
                    }
                }

                echo("            ResponseHeaderMetadata: " . $response->getResponseHeaderMetadata() . "\n");
     } catch (MarketplaceWebService_Exception $ex) {
         echo("Caught Exception: " . $ex->getMessage() . "\n");
         echo("Response Status Code: " . $ex->getStatusCode() . "\n");
         echo("Error Code: " . $ex->getErrorCode() . "\n");
         echo("Error Type: " . $ex->getErrorType() . "\n");
         echo("Request ID: " . $ex->getRequestId() . "\n");
         echo("XML: " . $ex->getXML() . "\n");
         echo("ResponseHeaderMetadata: " . $ex->getResponseHeaderMetadata() . "\n");
     }
 }

所以我的 $feed 变量就是我有问题的变量。我的目录中有 amzn-envelope.xsd 和其他 .xsd 文件。我做错了什么?

编辑

我发现解决方案实际上是我的 $feed 变量,因为我不需要作为我的提要一部分的 \ 行。

【问题讨论】:

    标签: php xml amazon-web-services xsd amazon-mws


    【解决方案1】:

    您的 Feed 已使用 Amazon XSD 进行验证,这意味着它在结构上没有问题,但仍可能包含逻辑错误,例如您的产品列表中没有 SKU 424271。要从 Amazon 获取有关逻辑错误的信息,仅调用 SubmitFeed 并检查其结果是不够的,因为这只会告诉您提要已被接受并已放入处理队列。您还需要等待该提要被处理并检查处理结果。

    how to check the processing state and results of MWS feeds

    还请注意,您需要发送多个相互依赖的提要。如果在当前数据之前没有发送(或处理失败)其他提要,提要很容易失败。

    sending multiple dependent MWS feeds to update products

    【讨论】:

    • 我使用 Amazon Scratchpad 并使用我的 FeedSubmissionId 来获取我尝试提交的提要的处理状态和结果。我发现我的$feed 变量不需要&lt;?xml version="1.0" ?&gt; 行,只需要以&lt;AmazonEnvelop...&gt; 开头。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2016-02-15
    相关资源
    最近更新 更多