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.