SoapClient 调用 returns 500 内部服务器错误
SoapClient call returns 500 Internal Server Error
我正在尝试使用 PHP 及其内置的 SoapClient 连接到 API。我已经检查了 url 我通过客户提供的格式错误的文档和 $client->__getFunctions()
returns 三个函数的列表。 HelloWorld($name)
以 Hello ~name~
响应,表明我正在通过 SoapClient 调用与服务器通信,并且 URL 是正确的。
但是,当我尝试访问 __getFunctions()
给我的其他方法之一时,即使在 copy/pasting 来自文档的 XML 并输入我自己的凭据之后,我我仍然从 SoapFault 对象中得到一个 Internal Server Error
故障字符串和 500
作为故障代码。
我确信是我自己的 XML 字符串导致了这个问题,但我终究无法弄清楚是怎么回事。事实证明,直接联系 API 提供者没有帮助。这是我第一次处理 Soap/Web 服务,所以我不确定从这里到哪里去。
我做了 wget http//xxx.xxx.xxx?wsdl
,它返回了一个有效的 XML 响应,与我在浏览器中直接转到 url 时得到的响应相同。为了解决这个问题,我应该研究什么?我处理过的所有过去 API 都是 JSON/RESTful,所以我觉得自己无法尝试调试 PHP 错误。
编辑
我已经慢慢删除了部分方法调用和部分 XML 字符串,试图触发不同的错误或其他错误,以便找到我需要修复的内容。我发现,通过不传递我的 XML 字符串,我从 $client->FunctionCall(...)
得到了有效的响应。这是一条 "this isn't right" 消息,但它是一条消息!事实上,为 xml 参数传递任何东西都会导致 500 http
faultcode/faultstring。这是否意味着我的 XMl 格式不正确,或者是否意味着他们的最终处理请求存在问题?
第二次编辑
如果我按如下方式进行$client
declecation,我会得到错误字符串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,
));
我尝试解决这个问题的时间越长,我就越困惑。
有时来自 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());
}
我正在尝试使用 PHP 及其内置的 SoapClient 连接到 API。我已经检查了 url 我通过客户提供的格式错误的文档和 $client->__getFunctions()
returns 三个函数的列表。 HelloWorld($name)
以 Hello ~name~
响应,表明我正在通过 SoapClient 调用与服务器通信,并且 URL 是正确的。
但是,当我尝试访问 __getFunctions()
给我的其他方法之一时,即使在 copy/pasting 来自文档的 XML 并输入我自己的凭据之后,我我仍然从 SoapFault 对象中得到一个 Internal Server Error
故障字符串和 500
作为故障代码。
我确信是我自己的 XML 字符串导致了这个问题,但我终究无法弄清楚是怎么回事。事实证明,直接联系 API 提供者没有帮助。这是我第一次处理 Soap/Web 服务,所以我不确定从这里到哪里去。
我做了 wget http//xxx.xxx.xxx?wsdl
,它返回了一个有效的 XML 响应,与我在浏览器中直接转到 url 时得到的响应相同。为了解决这个问题,我应该研究什么?我处理过的所有过去 API 都是 JSON/RESTful,所以我觉得自己无法尝试调试 PHP 错误。
编辑
我已经慢慢删除了部分方法调用和部分 XML 字符串,试图触发不同的错误或其他错误,以便找到我需要修复的内容。我发现,通过不传递我的 XML 字符串,我从 $client->FunctionCall(...)
得到了有效的响应。这是一条 "this isn't right" 消息,但它是一条消息!事实上,为 xml 参数传递任何东西都会导致 500 http
faultcode/faultstring。这是否意味着我的 XMl 格式不正确,或者是否意味着他们的最终处理请求存在问题?
第二次编辑
如果我按如下方式进行$client
declecation,我会得到错误字符串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,
));
我尝试解决这个问题的时间越长,我就越困惑。
有时来自 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());
}