亚马逊MWS - 更新产品数量

3

我正在使用Amazon API来更新产品的数量,使用"_POST_INVENTORY_AVAILABILITY_DATA_"作为数据类型(feedtype):

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

<?xml version="1.0"?>
<SubmitFeedResponse xmlns="http://mws.amazonaws.com/doc/2009-01-01/">
<SubmitFeedResult>
  <FeedSubmissionInfo>
    <FeedSubmissionId>6791310806</FeedSubmissionId>
    <FeedType>_POST_INVENTORY_AVAILABILITY_DATA_</FeedType>
    <SubmittedDate>2013-03-21T19:48:37+00:00</SubmittedDate>
    <FeedProcessingStatus>_SUBMITTED_</FeedProcessingStatus>
  </FeedSubmissionInfo>
</SubmitFeedResult>
<ResponseMetadata>
  <RequestId>fd07bf18-4f6a-4786-bdf9-9d4db50956d0</RequestId>
</ResponseMetadata>
</SubmitFeedResponse>

但是,当我尝试一次性加载使用Magento集合的15k或更多产品来更新产品时,数量在几个小时后仍未在Amazon上更新。这种方法正确吗,还是我需要使用其他方法?

有人可以帮我吗?

提前感谢。

3个回答

3

尝试使用_POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA_ feed类型,并在https请求的正文中发送一个CSV文件(制表符分隔),而不是XML文件。 CSV的第一行应为:sku price quantity(由制表符分隔),然后是包含值的行(由制表符分隔)。


模板可以在这里找到:http://docs.developer.amazonservices.com/en_DE/feeds/Feeds_FeedType.html - Prashant Saraswat

0

引用亚马逊MWS API:

每个Feed的大小限制为2,147,483,647字节(2^31-1)。如果您有大量数据要提交,应该通过分割数据来提交小于Feed大小限制的Feeds,或者在一段时间内提交Feeds。一个好的做法是提交大小限制为30,000条记录/项目的Feeds,或者每隔几个小时提交Feeds。


0
$feed = '<?xml version="1.0" encoding="utf-8" ?>
            <AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
            <Header>
              <DocumentVersion>1.01</DocumentVersion>
              <MerchantIdentifier>AG7AH5X9UOHEC</MerchantIdentifier>
              </Header>
              <MessageType>Inventory</MessageType>
             <Message>
                  <MessageID>1</MessageID>
                  <OperationType>Update</OperationType>
                <Inventory>
                  <SKU>UK-BBD10002</SKU>
                  <Quantity>4</Quantity>
                  <FulfillmentLatency>15</FulfillmentLatency>
                  </Inventory>
             </Message>
            <Message>
                  <MessageID>2</MessageID>
                  <OperationType>Update</OperationType>
                    <Inventory>
                      <SKU>UK-BBD10003</SKU>
                      <Quantity>6</Quantity>
                      <FulfillmentLatency>14</FulfillmentLatency>
                  </Inventory>
              </Message>
            </AmazonEnvelope>';

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

            $param['AWSAccessKeyId']   = Configure::read('AWS_ACCESS_KEY'); 
            $param['Action']           = 'SubmitFeed'; 
            $param['SellerId']         = Configure::read('SELLER_ID'); 
            $param['SignatureMethod']  = Configure::read('SIGNATURE_METHOD');  
            $param['SignatureVersion'] = Configure::read('SIGNATURE_VERSION'); 
            $param['Timestamp']        = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time());
            $param['Version']          = '2009-01-01'; 
            $param['FeedType']         = $FeedType;              
            $param['FeedContent']      = stream_get_contents($feedHandle);
            $param['ContentMd5']       = base64_encode(md5(stream_get_contents($feedHandle), true));    

            $param['MarketplaceIdList.Id.1'] =  $MARKETPLACE_ID; //FR
            //$param['MarketplaceIdList.Id.2'] =  'A1F83G8C2ARO7P'; //GB


            ksort($param);
            $MARKETPLACE_URL = 'mws.amazonservices.co.uk';  
            $secret = Configure::read('SECRET_KEY');

            $url = array();
            foreach ($param as $key => $val) {

                $key = str_replace("%7E", "~", rawurlencode($key));
                $val = str_replace("%7E", "~", rawurlencode($val));
                $url[] = "{$key}={$val}";
            }

            ksort($url);

            $arr   = implode('&', $url);

            $sign  = 'GET' . "\n";
            $sign .= ''.$MARKETPLACE_URL.'' . "\n";
            $sign .= '/Feeds/2009-01-01' . "\n";
            $sign .= $arr;

            $signature = hash_hmac("sha256", $sign, $secret, true);
            $signature = urlencode(base64_encode($signature));

            $link  = "https://".$MARKETPLACE_URL."/Feeds/2009-01-01?";
            $link .= $arr . "&Signature=" . $signature;

            $httpHeader = array();
            $httpHeader[] = 'Content-Type: application/xml';
            $httpHeader[] = 'Content-MD5: ' .  base64_encode(md5(stream_get_contents($feedHandle), true));
            $httpHeader[] = 'User-Agent: ' . $_SERVER['HTTP_USER_AGENT'];
            $httpHeader[] = 'Host: ' . $MARKETPLACE_URL;
            ksort($httpHeader);


            $ch = curl_init($link);
            curl_setopt($ch, CURLOPT_HEADER, 1);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);      
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                     
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
            $response = curl_exec($ch);
            $info = curl_getinfo($ch);
            curl_close($ch);
            @fclose($feedHandle);
            print_r($response);
            exit;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接