Amazon MWS PHP Отметьте заказ как отправленный – Подтвердите заказ Выполнение с доставкой с XML в переменной

Как отметить заказ, отправленный в Amazon MWS, используя XML-канал – используя правильную конечную точку, службу, версию и заголовки?

Это был вопрос, и мне потребовалось 3 дня, чтобы справиться с ним, так как amazon api чрезвычайно хаотичен, документация средневековая, а самая важная информация, например, правильные адреса конечных точек для отправки какой-либо конкретной информации, является загадкой для поиска. Я смог создать его только путем имитации запроса на блокноте, случайным образом тестируя разделы, объединяя примеры для других запросов для совершенно разных разделов и действий. Подача XML-каналов – единственный способ управлять вашими заказами в настоящее время.

Таким образом, это может помочь кому-то.

Solutions Collecting From Web of "Amazon MWS PHP Отметьте заказ как отправленный – Подтвердите заказ Выполнение с доставкой с XML в переменной"

Я смог сделать ниже простую работу кода:

$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("Ymd\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>