【问题标题】:Getting internal error on Amazon Marketplace API Requests在 Amazon Marketplace API 请求上出现内部错误
【发布时间】:2013-01-13 13:59:46
【问题描述】:

我已经下载了 Amazon 的 Marketplace SDK,并且正在试用示例目录中的一个示例。但是,每当我尝试时,我都会收到以下详细信息的异常:

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

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

【问题讨论】:

  • 当服务器根本无法访问外部页面时,我遇到了类似的问题。除了启用 cURL 之外,您是否确认 cURL 确实有效?
  • @TVK 好吧,我可以在同一台服务器上使用 Facebook 的 API,所以我认为它应该可以工作。我还能如何验证它的工作原理?
  • 我个人喜欢使用这个函数:pastebin.com/PwpFFBW7 要测试连接,请输入echo curl('http://example.com'); 如果 Facebook 的 API 工作正常,那么可能是 PHP 服务器和 Amazon 服务器之间的连接问题。你能从服务器 ping Amazon 吗?
  • 啊,但是如果我将 url 更改为https://mws.amazonservices.com,那么我会得到false 作为响应,与https://google.com 相同。所以问题出在https url上?有什么想法吗?
  • 看看这里 - curl.haxx.se/docs/caextract.html - 基本上,cURL 没有一个好的 CA 列表来检查。

标签: php api curl amazon amazon-mws


【解决方案1】:

此答案供将来参考。有关深入的故障排除,请参阅有关问题的 cmets。

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

打开CURLOPT_SSL_VERIFYPEER 会检查请求的主机是否有有效的证书,如果没有则让cURL 返回false。当CURLOPT_SSL_VERIFYPEER 关闭时,将接受无效证书(例如自签名)并返回常规响应。

【讨论】:

  • 感谢您的帮助。顺便问一下,你熟悉MWS吗?
  • 这对我帮助很大!我将其添加到亚马逊 MWS PHP Feed 库的 Client.php 的 performRequest() 函数中,最终得到了响应!谢谢!
  • 很好的解决方案,工作中!
【解决方案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,

在我的情况下成功了。但是,由于我不是安全专家,因此从这个角度没有建议。至少它可以工作,而且你可能不会像我那样浪费一整天。

【讨论】:

    【解决方案3】:

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

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

    如果这是复制而不修改

    'ProxyPort' => -1,
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 2016-03-29
      相关资源
      最近更新 更多