php api curl amazon amazon-mws

php - Obteniendo un error interno en las solicitudes de la API de Amazon Marketplace



curl amazon-mws (3)

Experimenté un problema de conexión muy similar con Amazon. Fueron los archivos de muestra incluidos con Amazon php api, que contienen una matriz de configuración siguiente:

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

y si esto se copia y no se modifica

''ProxyPort'' => -1,

dará como resultado un intento de conectarse a través de un puerto proxy -1 que, por supuesto, fallará (el problema se rastrea al verificar el error de curl). Espero que esto ayude.

Descargué Amazon''s Marketplace SDK y estoy probando una de las muestras en el directorio samples. Sin embargo, recibo una excepción con los siguientes detalles cada vez que lo intento:

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

También tengo CURL habilitado con SSL. ¿Qué estoy haciendo mal?


Esta respuesta es para referencia futura. Para la resolución de problemas en profundidad, vea los comentarios sobre la pregunta.

La respuesta vacía indica una conexión fallida al servidor de Amazon. En este caso, HTTP funcionó bien, pero HTTPS no. Como desactivar CURLOPT_SSL_VERIFYPEER en la configuración de cURL resolvió el problema, parece que el servidor de Amazon no estaba utilizando un certificado SSL válido.

Tener CURLOPT_SSL_VERIFYPEER activado comprueba si el host solicitado tiene un certificado válido y deja que cURL devuelva false si no lo hace. Cuando CURLOPT_SSL_VERIFYPEER está desactivado, se aceptan certificados inválidos (por ejemplo, autofirmados) y se devuelve la respuesta regular.


Para futura referencia. En la nueva versión del SDK, las opciones se referencian en client.php de la siguiente manera

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 ); }

ajuste

CURLOPT_SSL_VERIFYPEER => false,

hizo el truco en mi caso. Como yo no soy un experto en seguridad, sin embargo, no hay ninguna recomendación desde este punto de vista. Al menos está funcionando y probablemente no estés perdiendo 1 día completo como lo hice yo.