2013-11-27 4 views
2

,아마존 MWS - 업데이트 제품 수량 내가 좋아하는 "_POST_INVENTORY_AVAILABILITY_DATA_"피드 유형을 사용하여 업데이트 제품의 수량 아마존 API를 사용하고

<?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> 

을하지만 난 마 젠토를 사용하여로드 제품을 한 번에 15,000 개 이상의 제품을 업데이트하려고하면 몇 시간 후에 아마존에서 수집량이 업데이트되지 않습니다. 그것은 올바른 방법인가요, 아니면 다른 방법을 사용해야합니까?

아무도 도와 줄 수 있습니까?

미리 감사드립니다.

답변

3

_POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA_ feedtype을 사용하고 XML 파일 대신 https 요청 본문에 CSV 파일 (탭 구분)을 보내보십시오. csv의 첫 번째 줄은 sku 가격 수량 (탭으로 구분) 뒤에 값 (탭으로 구분)이 포함 된 줄을 입력해야합니다.

+1

당신은 CSV 형식의 예가 있습니까? – Erik

+0

템플릿을 사용할 수 있습니다 [여기] (http://docs.developer.amazonservices.com/en_DE/feeds/Feeds_FeedType.html) –

0

인용 아마존 MWS의 API :

피드 크기 피드 당 2,147,483,647 바이트 (2^31 -1)로 제한된다. 에 제출할 대량의 데이터가있는 경우 데이터를 분할하여 보다 작은 피드를 피드 크기 제한보다 작게 제출하거나 일정 기간 동안 피드 을 제출해야합니다. 한 가지 좋은 방법은 크기 제한이 30,000 레코드/개인 피드를 제출하거나 시간 (예 : 몇 시간) 동안 피드를 제출하는 것입니다.

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; 
관련 문제