【发布时间】:2015-02-18 20:09:35
【问题描述】:
我正在尝试使用 MWS 实现一种基于内部酿造的 php 将产品上传到我的亚马逊市场的方式。
我浏览了这些示例,并认为在成功的消息和 FeedSubmissionID 的情况下我走在了正确的轨道上,但事实并非如此,MWS 会告诉您您已经成功完成了 SubmitFeed,即使您确实没有。
我的问题与当我尝试更新我的库存时我的 $feed 变量究竟应该是什么样子有关。根据亚马逊 MWS 发现 here。
代码
这是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 变量,因为我不需要作为我的提要一部分的 \ 行。
【问题讨论】:
标签: php xml amazon-web-services xsd amazon-mws