【问题标题】:Amazon MWS PHP Mark order as Shipped - Submit Order Fulfillment with Shipping with XML in variable亚马逊 MWS PHP 将订单标记为已发货 - 使用变量中的 XML 提交订单履行
【发布时间】:2014-09-09 01:02:26
【问题描述】:

如何使用 XML 提要在亚马逊 MWS 中标记已发货的订单 - 使用正确的终端节点、服务、版本和标头?

这就是问题所在,我花了 3 天时间来解决它,因为 amazon api 非常混乱,文档是中世纪的,而且最关键的信息(例如提交任何特定信息的正确端点地址)是一个谜。我只能通过在暂存器上模仿一个请求,随机测试部分,结合其他请求的示例来创建它,以实现完全不同的部分和操作。提交 XML Feed 是目前管理订单的唯一方法。

所以,这可能对某人有所帮助。

【问题讨论】:

  • 您好,我可以从哪里找到可用的运输方式?
  • 我现在不能说任何有用的东西。自从我不得不处理这个亚马逊问题以来已经太久了。

标签: php amazon-mws


【解决方案1】:

我能够使下面的简单代码工作:

                        $param = array();
                        $param['AWSAccessKeyId']   = 'YOURKEY'; 
                        $param['Action']           = 'SubmitFeed'; 
                        $param['Merchant']         = 'YOURMERCHANTID'; 
                        $param['FeedType']         = '_POST_ORDER_FULFILLMENT_DATA_'; 
                        $param['SignatureMethod']  = 'HmacSHA256';  
                        $param['SignatureVersion'] = '2'; 
                        $param['Timestamp']        = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time());
                        $param['Version']          = '2009-01-01'; 
                        $param['MarketplaceId.Id.1']    = 'MARKETPLACEID';
                        $param['PurgeAndReplace']    = 'false';

                        $secret = 'YOURSECRETKEY';

                        $url = array();
                        foreach ($param as $key => $val) {

                            $key = str_replace("%7E", "~", rawurlencode($key));
                            $val = str_replace("%7E", "~", rawurlencode($val));
                            $url[] = "{$key}={$val}";
                        }

                        $amazon_feed='<?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>YOURMERCHANTID</MerchantIdentifier>
                            </Header>
                            <MessageType>OrderFulfillment</MessageType>
                            <Message>
                            <MessageID>1</MessageID>
                            <OrderFulfillment>
                            <AmazonOrderID>YOUROWNORDERIDHERE</AmazonOrderID>
                            <FulfillmentDate>'.$param['Timestamp'].'</FulfillmentDate>
                            <FulfillmentData>
                            <CarrierName>TRACKINGCONAMEHERE</CarrierName>
                            <ShippingMethod>TRACKINGCONAMEORMETHODHERE</ShippingMethod>
                            <ShipperTrackingNumber>TRACKINGNOHERE</ShipperTrackingNumber>
                            </FulfillmentData>
                            </OrderFulfillment>
                            </Message>
                            </AmazonEnvelope>';


                        sort($url);

                        $arr   = implode('&', $url);

                        $sign  = 'POST' . "\n";
                        $sign .= 'mws.amazonservices.com' . "\n";
                        $sign .= '/Feeds/'.$param['Version'].'' . "\n";
                        $sign .= $arr;

                        $signature = hash_hmac("sha256", $sign, $secret, true);
                        $httpHeader     =   array();
                        $httpHeader[]   =   'Transfer-Encoding: chunked';
                        $httpHeader[]   =   'Content-Type: application/xml';
                        $httpHeader[]   =   'Content-MD5: ' . base64_encode(md5($amazon_feed, true));
                        $httpHeader[]   =   'Expect:';
                        $httpHeader[]   =   'Accept:';              

                        $signature = urlencode(base64_encode($signature));

                        $link  = "https://mws.amazonservices.com/Feeds/".$param['Version']."?";
                        $link .= $arr . "&Signature=" . $signature;
                        echo '<br>';
                        echo($link); //for debugging - you can paste this into a browser and see if it loads.
                        echo '<br>';
                        $ch = curl_init($link);
                        curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
                        curl_setopt($ch, CURLOPT_POST, 1); 
                        curl_setopt($ch, CURLOPT_POSTFIELDS, $amazon_feed); 
                        $response = curl_exec($ch);
                        $info = curl_getinfo($ch);
                        curl_close($ch);

给出以下输出:

<?xml version="1.0"?><SubmitFeedResponse xmlns="http://mws.amazonaws.com/doc/2009-01-01/">SubmitFeedResult>FeedSubmissionInfo>FeedSubmissionId>XXXXXXXXXXXXXXXXXXX</FeedSubmissionId><FeedType>_POST_ORDER_FULFILLMENT_DATA_</FeedType><SubmittedDate>2014-09-09T00:36:29+00:00</SubmittedDate><FeedProcessingStatus>_SUBMITTED_</FeedProcessingStatus></FeedSubmissionInfo>/SubmitFeedResult>ResponseMetadata>RequestId>XXXXXXXXXXXXXXXXXXX</RequestId></ResponseMetadata></SubmitFeedResponse><?xml version="1.0"?><SubmitFeedResponse xmlns="http://mws.amazonaws.com/doc/2009-01-01/"><SubmitFeedResult><FeedSubmissionInfo><FeedSubmissionId>XXXXXXXXXXXXXXXXXXX</FeedSubmissionId>FeedType>_POST_ORDER_FULFILLMENT_DATA_</FeedType><SubmittedDate>2014-09-09T00:36:29+00:00</SubmittedDate>FeedProcessingStatus>_SUBMITTED_</FeedProcessingStatus></FeedSubmissionInfo>/SubmitFeedResult>ResponseMetadata>RequestId>XXXXXXXXXXXXXXXXXXX</RequestId></ResponseMetadata></SubmitFeedResponse>

【讨论】:

  • 您好,我在哪里可以找到支持 api 的运输方式?
猜你喜欢
  • 2013-05-26
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多