在Amazon Marketplace API请求中获取内部错误

时间:2013-01-13 13:59:46

标签: php api curl amazon amazon-mws

我已经下载了亚马逊的Marketplace SDK,我正在试用样本目录中的一个样本。但是,每当我尝试时,我都会收到以下详细信息的例外情况:

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

我也使用SSL启用了CURL。我做错了什么?

3 个答案:

答案 0 :(得分:15)

这个答案供将来参考。有关深入的故障排除,请参阅有关该问题的评论。

空响应表示与Amazon服务器的连接失败。在这种情况下,HTTP工作正常,但HTTPS没有。由于在cURL设置中关闭CURLOPT_SSL_VERIFYPEER解决了问题,因此似乎亚马逊服务器未使用有效的SSL证书。

启用CURLOPT_SSL_VERIFYPEER检查请求的主机是否具有有效证书,如果不是,则让cURL返回false。当CURLOPT_SSL_VERIFYPEER关闭时,接受无效证书(例如,自签名)并返回常规回复。

答案 1 :(得分:2)

供将来参考。在新版本的SDK中,选项在client.php中引用,如下所示

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

设置

CURLOPT_SSL_VERIFYPEER => false,

在我的案例中做了伎俩。但是,由于我不是安全专家,因此从这一观点来看,没有任何建议。至少它的工作和你可能没有像我一样失去一整天。

答案 2 :(得分:1)

我遇到了与亚马逊非常相似的连接问题。它是与Amazon php api捆绑在一起的示例文件,其中包含以下配置数组:

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

如果这是复制而未修改

'ProxyPort' => -1,

将导致尝试通过代理端口-1连接,这当然会失败(通过检查卷曲错误来跟踪问题)。我希望这会有所帮助。