Как должен выглядеть мой канал при использовании Amazon MWS?


Я пытаюсь реализовать собственный способ загрузки продукта на основе php на мой рынок Amazon с помощью MWS.

Я просмотрел образцы и подумал, что нахожусь на правильном пути, учитывая успешные сообщения и идентификаторы Feedsubmission, но это просто не так, и MWS сообщает вам, что вы успешно завершили отправку, хотя на самом деле это не так.

Мой вопрос касается того, как именно должна выглядеть моя переменная $feed, когда я пытаюсь обновить свой инвентарь. На основе MWS Amazon, найденных здесь.

Код

Это сокращенная версия 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, поскольку мне не нужна была версия \<\?xml="1.0" \?> строка, которая была частью моего канала.

Author: gh0st, 2015-02-18

1 answers

Ваш канал проверяется с помощью Amazon XSD, что означает, что он структурно исправен, но все еще может содержать логические ошибки, такие как отсутствие артикула 424271 в вашем списке продуктов. Чтобы получить информацию о логических ошибках обратно от Amazon, недостаточно позвонить SubmitFeed и проверить его результаты, потому что это говорит только о том, что канал был принят и помещен в очередь обработки. Вам также нужно подождать, пока этот канал будет обработан, и проверить результаты обработки, как только он будет обработан.

Как проверить состояние обработки и результаты каналов MWS

Пожалуйста, также обратите внимание, что вам необходимо отправить несколько каналов, которые зависят друг от друга. Каналы легко выходят из строя, если другие каналы не были отправлены (или не были обработаны) до текущих данных.

Отправка нескольких зависимых каналов MWS для обновления продуктов

 3
Author: Hazzit, 2017-05-23 12:30:24