在亚马逊 MWS 中更新订单状态后出现“无法履行订单”错误
Posted
技术标签:
【中文标题】在亚马逊 MWS 中更新订单状态后出现“无法履行订单”错误【英文标题】:"Order cannot be fulfilled" error after updating order status in Amazon MWS 【发布时间】:2016-10-03 16:07:23 【问题描述】:您好,我已经使用 Orders API 列出了我的订单中所有可用的订单, 现在我想通过使用 Feed API 将订单状态更新为 Shipped,在 amazon Scratchpad 我使用 Feed API 来更新产品的状态并且它已成功提交并且然后通过使用 Feed-ID,我检查了提交的 Feed 的状态,状态中没有错误,但有一个名为此的警告。
订单无法完成。如需更多信息,请联系卖家支持
并且订单状态没有更改为已发货。
这是我用来更新状态的 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");
编辑了上面的代码。这是我的提交提要 API 中包含的内容。
【问题讨论】:
这是您正在履行的实际订单吗?如果是,请联系卖家支持,他们可以比我们更快地为您提供帮助。 是的,是真正的订单。 但我想将此项目标记为从 API 发货,而不是手动。 【参考方案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);
【讨论】:
嗨,谢谢你的代码,我试着给出你在亚马逊暂存器中给出 XML 的方式,然后同样的警告也来了.. 能否请您发布您的整个代码,以便我检查是否有任何更改。 我已经编辑并在顶部发布了整个代码,请查看。 嗨,萨尔曼,我唯一能想到的是,我不知道你是否声明了 DATE_FORMAT = 'Y-m-d';在配置文件中。如果您按该订单运送所有物品,您也不需要以上是关于在亚马逊 MWS 中更新订单状态后出现“无法履行订单”错误的主要内容,如果未能解决你的问题,请参考以下文章
从哪里获取买家信息,例如买家电子邮件、姓名等待处理订单或在亚马逊 mws 中取消订单