У меня возникла проблема с получением результатов обработанного файла фида с использованием API Amazon MWS с PHP. Если честно, я использую класс getFeedSubmissionResult. Проблема в том, что, когда я использую API, как указано в документации, нет соответствующих данных, которые читаются классом, к которому я могу получить доступ (или, как кажется). Поэтому мой вопрос: как я могу получить необработанный XML-файл, который amazon отправляет обратно и сохраняет его в файл на моем компьютере?
Я исправляю код, используемый MWS, и пытаюсь найти, где они вытаскивают файл XML из Amazon, и анализировать его, чтобы попытаться сохранить его в файл без везения. Я был бы очень признателен, если бы кто-то мог направить меня на исправление, а если нет, то, возможно, работа может быть лучше.
Так вот что я делаю:
Я использовал getFeedSubmissionResultSample.php, предоставленный в образцах MWS. Предположительно, это должно дать мне данные, которые сообщают мне, сколько элементов было обработано и сколько обработанных элементов были успешными. Но это не так. Поэтому я попытался сделать print_r переменной ответа:
function invokeGetFeedSubmissionResult(MarketplaceWebService_Interface $service,$request) { try { $response = $service->getFeedSubmissionResult($request); echo "<br />Var dump here: <pre>"; print_r($response); echo ("<pre>Service Response\n"); echo ("=============================================================================\n"); echo(" GetFeedSubmissionResultResponse\n"); if ($response->isSetGetFeedSubmissionResultResult()) { $getFeedSubmissionResultResult = $response->getGetFeedSubmissionResultResult(); echo (" GetFeedSubmissionResult\n"); if ($getFeedSubmissionResultResult->isSetContentMd5()) { echo (" ContentMd5\n"); echo (" " . $getFeedSubmissionResultResult->getContentMd5() . "\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"); } }
И результат дает мне это:
GetFeedSubmissionResultResponse GetFeedSubmissionResult ContentMd5 G5Sw+2ooONEZU1iQoqdEOQ== ResponseMetadata RequestId f9d4be45-6710-42eb-850e-f437224f9938 ResponseHeaderMetadata: RequestId: f9d4be45-6710-42eb-850e-f437224f9938, ResponseContext: EM/RH7RHQhLSc47Tj2a2Uv2CGKEfvxaKOijjcaKeoh8dGISci3yqo9OHZs7dpLDIszJVz4Jt4z8=,9SYUaktMzcOG6UyuyhXu/kJPl0gpLeenslL2rkugDLhDYftMleRx1XIexbVWNxuYl7cO6901Foiv Kp7hvaLeAQ==, Timestamp: 2013-06-18T07:29:37.393Z
Я опустил результаты var_dump, потому что я не знаю, может ли это вызвать проблему безопасности с моей стороны. Но в любом случае var_dump не предоставил никаких данных, к которым я мог бы получить доступ. Я также проследил код, где классы и их методы, чтобы увидеть, могу ли я получить к нему доступ оттуда, но вышел с пустыми руками.
Обратите внимание, что у меня есть правильные параметры для вызова результатов (например, FeedSubmissionId), потому что я сделал это с помощью амазонки.
Ваша помощь будет принята с благодарностью! 🙂
привет, Калеб
У меня такая же проблема. Проблема заключается в том, что ответ возвращает результат, чтобы вы могли сравнить полученный файл с целью проверки отсутствия коррупции во время передачи. Чтобы получить ответ xml с сообщением, вы должны сохранить его в файл, а не в память php: //. Итак, следующий код работает для меня отлично
$filename = __DIR__.'/file.xml'; $handle = fopen($filename, 'w+'); $request = new MarketplaceWebService_Model_GetFeedSubmissionResultRequest(); $request->setMerchant(MERCHANT_ID); $request->setFeedSubmissionId(ID_TO_CHANGE); $request->setFeedSubmissionResult($handle); try { $response = $service->getFeedSubmissionResult($request); fclose($handle); echo ("Service Response\n"); echo ("=============================================================================\n"); echo(" GetFeedSubmissionResultResponse\n"); if ($response->isSetGetFeedSubmissionResultResult()) { $getFeedSubmissionResultResult = $response->getGetFeedSubmissionResultResult(); echo (" GetFeedSubmissionResult"); if ($getFeedSubmissionResultResult->isSetContentMd5()) { echo (" ContentMd5"); echo (" " . $getFeedSubmissionResultResult->getContentMd5() . "\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"); }
результат, который вы можете найти в файле ./file.xml, помог мне
Если вы не хотите использовать файл. Затем в конце вашего утверждения try.
$ xml = stream_get_contents ($ request-> getFeedSubmissionResult ());
Это поместит xml-данные в $ xml