您好我已使用订单API列出了订单中的所有订单, 现在,我想通过使用Feed API将订单状态更新为已发货,在 amazon Scratchpad 中,我使用Feed API更新产品的状态,并且已成功提交,然后通过使用Feed-ID我检查了提交的Feed的状态,状态中没有错误,但是有一个名为this的警告。
订单无法兑现。有关更多信息,请联系卖家支持
订单状态不会更改为已发货。
这是我用来更新状态的Feed,而Feed类型是_POST_ORDER_FULFILLMENT_DATA_ 我不知道我应该给什么,所以我只给了一个随机数,我试过没有这个MerchantFulfillmentID但没用,请帮我解决这个问题,谢谢
<?php
/**
* PHP Version 5
*
* @category Amazon
* @package MarketplaceWebService
* @copyright Copyright 2009 Amazon Technologies, Inc.
* @link http://aws.amazon.com
* @license http://aws.amazon.com/apache2.0 Apache License, Version 2.0
* @version 2009-01-01
*/
/**
* Submit Feed Sample
*/
include_once ('.config.inc.php');
// India
$serviceUrl = "https://mws.amazonservices.in";
$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);
$ship_date = date("c");
$feed = <<<EOD
<?xml version="1.0"?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>***********</MerchantIdentifier>
</Header>
<MessageType>OrderFulfillment</MessageType>
<Message>
<MessageID>1</MessageID>
<OrderFulfillment>
<AmazonOrderID>111-1111111-1111111</AmazonOrderID>
<FulfillmentDate>$ship_date</FulfillmentDate>
<FulfillmentData>
<CarrierName>Contact Us for Details</CarrierName>
<ShippingMethod>Standard</ShippingMethod>
</FulfillmentData>
<Item>
<AmazonOrderItemCode>70359459457611</AmazonOrderItemCode>
<Quantity>1</Quantity>
</Item>
</OrderFulfillment>
</Message>
</AmazonEnvelope>
EOD;
// Constructing the MarketplaceId array which will be passed in as the the MarketplaceIdList
// parameter to the SubmitFeedRequest object.
$marketplaceIdArray = array("Id" => array('************'));
// MWS request objects can be constructed two ways: either passing an array containing the
// required request parameters into the request constructor, or by individually setting the request
// parameters via setter methods.
// Uncomment one of the methods below.
/********* Begin Comment Block *********/
$feedHandle = @fopen('php://temp', 'rw+');
fwrite($feedHandle, $feed);
rewind($feedHandle);
$parameters = array (
'Merchant' => MERCHANT_ID,
'MarketplaceIdList' => $marketplaceIdArray,
'FeedType' => '_POST_ORDER_FULFILLMENT_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);
/********* End Comment Block *********/
invokeSubmitFeed($service, $request);
//@fclose($feedHandle);
*
* @param MarketplaceWebService_Interface $service instance of MarketplaceWebService_Interface
* @param mixed $request MarketplaceWebService_Model_SubmitFeed or array of parameters
*/
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 API中包含的内容。
答案 0 :(得分:1)
我使用以下代码使用Feeds API发送订单。
$order_id = str_replace('"', "", $product_list[$i][0]);
$ship_date = date("c");
$carrier_code = str_replace('"', "", $product_list[$i][4]);
///////////////////////////////////////////////////////////////////
//THE FulfillmentDate MUST BE BETWEEN THE ORDER DATE AND NOW
///////////////////////////////////////////////////////////////////
$pre_message .= "<Message>";
$pre_message .= "<MessageID>$i</MessageID>";
$pre_message .= "<OrderFulfillment>";
$pre_message .= "<AmazonOrderID>$order_id</AmazonOrderID>";
$pre_message .= "<FulfillmentDate>$ship_date</FulfillmentDate>";
$pre_message .= "<FulfillmentData>";
$pre_message .= "<CarrierCode>Royal Mail</CarrierCode>";
$pre_message .= "</FulfillmentData>";
$pre_message .= "</OrderFulfillment>";
$pre_message .= "</Message>";
$feed = <<<EOD
<?xml version="1.0"?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>$merchant_token</MerchantIdentifier>
</Header>
<MessageType>OrderFulfillment</MessageType>
$pre_message
</AmazonEnvelope>
EOD;
$feed = trim($feed);
$marketplaceIdArray = array("Id" => array($MARKETPLACE_ID));
$feedHandle = @fopen('php://temp', 'rw+');
fwrite($feedHandle, $feed);
rewind($feedHandle); //Sets file pointer at beginning of file
$parameters = array(
'Merchant' => $MERCHANT_ID,
'MarketplaceIdList' => $marketplaceIdArray,
'FeedType' => '_POST_ORDER_FULFILLMENT_DATA_',
'FeedContent' => $feedHandle,
'PurgeAndReplace' => false, //Leave this PurgeAndReplace to false so that it want replace whole product in amazon inventory
'ContentMd5' => base64_encode(md5(stream_get_contents($feedHandle), true))
);
rewind($feedHandle);
$request = new MarketplaceWebService_Model_SubmitFeedRequest($parameters);
$return_feed = invokeSubmitFeed($service, $request);