SoapClient调用返回500内部服务器错误

Tim*_*rts 4 php soap soap-client

我正在尝试使用PHP及其内置的SoapClient连接到API.我已经检查了我通过客户端提供的格式错误的文档给出的URL,并$client->__getFunctions()返回了三个函数的列表.HelloWorld($name),响应Hello ~name~,告诉我,我通过SoapClient调用与服务器通信,URL是正确的.

但是,当我尝试访问__getFunctions()提供给我的其他方法之一时,即使在从文档复制/粘贴XML并放入我自己的凭据之后,我仍然被赋予了一个Internal Server Errorfaulttring和500来自SoapFault对象的faultcode.

我确信这是我自己的XML字符串导致问题,但我不能为我的生活弄清楚如何.直接与API提供商联系并未证明有用.这是我第一次处理肥皂/网络服务,所以我不确定从哪里开始.

我做了wget http//xxx.xxx.xxx?wsdl,它返回了我看起来像一个有效的XML响应,就像我直接进入浏览器中的URL时得到的那样.为了解决这个问题,我应该考虑什么?我所处理的所有过去的API都是JSON/RESTful,所以我觉得我的元素试图调试PHP错误.

编辑

我已经慢慢删除了部分方法调用和部分XML字符串,试图触发不同的错误或某些东西,以便找到我需要修复的内容.我发现,通过不传入我的XML字符串,我得到了一个有效的响应$client->FunctionCall(...).这是一个"这是不对的"消息,但这是一条消息!实际上,为xml参数传递该函数ANYTHING会导致500 httpfaultcode/faultstring.这是否意味着我的XMl格式不正确或者是否意味着他们的结束处理请求存在问题?

第二次编辑

如果我$client按照以下方式进行取消,我会得到故障串Could not connect to host

$opts = array(
    'ssl' => array('ciphers'=>'RC4-SHA')
  );
$client = new SoapClient($CREDS['orderingWSDL'], array (
"encoding"=>"ISO-8859-1",
'stream_context' => stream_context_create($opts),
  'exceptions'=>true,
));
Run Code Online (Sandbox Code Playgroud)

我试图解决这个问题的时间越长越困惑.

Kri*_*ing 8

有时来自SOAP服务的500状态可能是抛出的SoapFault异常.为了帮助您进行故障排除,您需要能够检查请求XML和响应XML.

将代码放在try/catch块中,并使用$client->__getLastRequest()$client->__getLastResponse()检查实际的XML.

例:

$client = new SoapClient('http//xxx.xxx.xxx?wsdl', array('soap_version'=>SOAP_1_1,'trace' => 1,'exceptions' => true));
try {
  $response = $client->someFunction();
  var_dump($response);
} catch (Exception $e)  {
  var_dump($e->getMessage());
  var_dump($client->__getLastRequest());
  var_dump($client->__getLastResponse());
}
Run Code Online (Sandbox Code Playgroud)

  • 当禁用PHP错误报告时(可能在生产中使用服务器时,例如使用CentOS 7的默认配置),上面的行几乎没有报告.要查看有意义的内容,您需要添加ini_set('display_errors','On'); 在SOAP服务的开头,那么上面描述的解决方案非常有用.花了我一个小时来弄清楚这个^^ (4认同)