Amazon MWS API с PHP: альтернатива getFeedSubmissionResult
У меня возникла проблема с получением результатов обработанного файла канала с использованием 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), потому что я сделал это с помощью блокнота amazon.
Мы будем очень признательны за вашу помощь!:)
С уважением, Калеб
2 answers
У меня была та же проблема. Проблема в том, что ответ возвращает результат, с которым вы можете сравнить полученный файл, чтобы убедиться в отсутствии повреждений во время передачи. Чтобы получить 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 файл это помогло мне
Если вы не хотите использовать файл. Затем в конце вашего заявления о попытке.
$xml =поток_гет_контенты($запрос->getfeedsubmissionresult());
Это поместит xml-данные в $xml