我正在使用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或更多产品,也不会在几个小时后在亚马逊更新。是正确的方法还是我需要使用任何其他方法?
任何人都可以帮助我吗?
提前致谢。
答案 0 :(得分:3)
尝试使用_POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA_ feedtype并在https请求的正文中发送CSV文件(制表符分隔),而不是XML文件。 csv的第一行应该是:sku价格数量(由制表符分隔),后跟包含值的行(由制表符分隔)。
答案 1 :(得分:0)
引用亚马逊MWS API:
每个Feed的Feed大小限制为2,147,483,647字节(2 ^ 31 -1)。如果你 要提交大量数据,您应该提交较小的Feed 通过分解数据或提交Feed来确定Feed大小限制 过了一段时间。一个好的做法是用a提交feed 大小限制为30,000条记录/项目或在一段时间内提交Feed 时间,比如每隔几个小时。
答案 2 :(得分: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;