2013-01-13 41 views
7

Pobrałem pakiet SDK Amazon Marketplace i próbuję jednej z próbek w próbach reż. Otrzymuję jednak wyjątek z następującymi szczegółami, gdy tylko go wypróbuję:Wystąpił błąd wewnętrzny w żądaniach interfejsu Amazon Marketplace API

Caught Exception: Internal Error 
Response Status Code: 0 
Error Code: 
Error Type: 
Request ID: 
XML: RequestId: , ResponseContext: , Timestamp: 
ResponseHeaderMetadata: 

Mam włączoną obsługę CURL z SSL. Co ja robię źle?

+1

Miałem podobny problem, gdy serwer po prostu nie mógł uzyskać dostępu do zewnętrznych stron. Poza włączeniem cURL, czy potwierdziłeś, że cURL rzeczywiście działa? – tvkanters

+0

@TVK Cóż, jestem w stanie używać API Facebooka na tym samym serwerze, więc myślę, że powinno działać. Jak jeszcze mogę sprawdzić, czy działa? –

+1

Osobiście lubię korzystać z tej funkcji: http://pastebin.com/PwpFFBW7 Aby przetestować połączenie, wpisz 'echo curl ('http://example.com');' Jeśli działa API Facebooka, być może jest to problem połączenia między serwerem PHP a serwerem Amazon. Czy możesz pingować Amazon z serwera? – tvkanters

Odpowiedz

13

Ta odpowiedź jest przeznaczona do wykorzystania w przyszłości. W celu dogłębnego rozwiązywania problemów zobacz komentarze na pytanie.

Pusta odpowiedź wskazuje na nieudane połączenie z serwerem Amazon. W tym przypadku HTTP działał bez zarzutu, ale protokół HTTPS nie działał. Ponieważ wyłączenie CURLOPT_SSL_VERIFYPEER w ustawieniach cURL rozwiązało problem, okazało się, że serwer Amazon nie używał prawidłowego certyfikatu SSL.

Po włączeniu CURLOPT_SSL_VERIFYPEER sprawdza, czy żądany host ma poprawny certyfikat i pozwala cURL zwrócić false, jeśli nie. Gdy CURLOPT_SSL_VERIFYPEER jest wyłączone, niepoprawne certyfikaty (np. Z podpisem własnym) są akceptowane i zwracają zwykłą odpowiedź.

+0

Dzięki za pomoc. A propos, czy znasz MWS? –

+0

Nie ma za co, i nie, nie pracowałeś z tym. – tvkanters

+0

To pomogło mi niezmiernie! Dodałem, że do funkcji performRequest() Client.php z biblioteki Amazon MWS PHP Feed i ostatecznie otrzymałem odpowiedź! Dzięki! – jmk

1

Doświadczyłem bardzo podobnego problemu z połączeniem z Amazon. Było to przykładowe pliki w pakiecie z php api Amazon, które zawierają następującą tablicę konfiguracji:

$config = array (
    'ServiceURL' => $serviceUrl, 
    'ProxyHost' => null, 
    'ProxyPort' => -1, 
    'MaxErrorRetry' => 3, 
); 

i jeśli jest to skopiowane i niemodyfikowane

'ProxyPort' => -1, 

spowoduje próbę połączenia przez port proxy -1, który oczywiście się nie powiedzie (problem śledzony przez sprawdzenie błędu zwijania). Mam nadzieję, że to pomoże.

1

Do wykorzystania w przyszłości. W nowej wersji SDK opcje są wymienione w client.php następująco

private function getDefaultCurlOptions() { 
    return array (
     CURLOPT_POST => true, 
     CURLOPT_USERAGENT => $this->config['UserAgent'], 
     CURLOPT_VERBOSE => true, 
     CURLOPT_HEADERFUNCTION => array ($this, 'headerCallback'), 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_SSL_VERIFYPEER => true, 
     CURLOPT_SSL_VERIFYHOST => 2 
    ); 
    } 

ustawienie

CURLOPT_SSL_VERIFYPEER => false, 

załatwiło sprawę w moim przypadku. Jako że nie jestem ekspertem ds. Bezpieczeństwa, nie otrzymuję żadnej rekomendacji z tego punktu widzenia. Przynajmniej działa i prawdopodobnie nie tracisz 1 całego dnia, tak jak ja.