2013-11-27 126 views
2

我使用了更新的产品的数量亚马逊API使用“_POST_INVENTORY_AVAILABILITY_DATA_”的FeedType一样,亚马逊MWS - 更新产品数量

<?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以上的产品亚马逊数小时后的采集数量也不会更新。是正确的方法还是我需要使用任何其他方法?

任何人都可以帮助我吗?

在此先感谢。

回答

3

尝试使用_POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA_ feedtype并在https请求的主体中发送CSV文件(制表符分隔)而不是XML文件。 csv的第一行应该是:sku价格数量(由制表符分隔),后面是包含值的行(由制表符分隔)。

+1

你有没有CSV格式的例子吗? – Erik

+0

模板可用[here](http://docs.developer.amazonservices.com/en_DE/feeds/Feeds_FeedType.html) –

0

引用亚马逊MWS API:

饲料大小被限制为每饲料2,147,483,647字节(2^31 -1)。如果您的 有大量要提交的数据,则应通过分解数据或在一段时间内提交供稿 来提交比Feed大小限制更小的订阅源 。一种好的做法是提交大小限制为30000条记录/条目的订阅源,或者在 时间段(例如每隔几个小时)提交订阅源。

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;