如何解决PHP-EWS / SOAP错误?

时间:2011-04-01 01:24:16

标签: php soap curl exchangewebservices

去年,我使用Exchange Web服务创建了一个与Exchange 2010 Server交互的PHP项目。我刚回到这个项目,当我尝试使用任何php-ews方法时,我收到此错误:

SoapClient::__doRequest() returned non string value

我并不完全理解所有SOAP和CURL代码是如何工作的,所以有人可以给我一些关于如何对此进行故障排除的指示吗?

我尝试过的事情

当我转到在Web浏览器中发送SOAP请求的URL时,我被警告它没有有效的证书,因此我将以下代码放在我的NTLMSoapClient和NTLMStream中: / p>

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

但我仍然收到同样的错误。

当我浏览网页浏览器中的地址并忽略证书警告时,系统会提示我输入密码,它似乎只接受管理员密码,然后将其重定向到services.wsdl。

将我的代码中的用户名和密码更改为管理员用户名和密码没有任何区别。

1 个答案:

答案 0 :(得分:3)

我曾经在一个类似的项目上工作,但涉及PHP和MS Sharepoint Web服务。 我使用NuSoap库来促进使用SOAP。

我没有使用PHP EWS的经验,但我建议您查看请求和响应代码,数据和标题,以查看您的确切发送和接收内容。此信息可能会帮助您找到问题(无论是身份验证错误还是无法获取wsdl描述或Web方法的无效参数等。)

// For debugging purposes
// return transfer data as a result
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// read headers
curl_setopt($ch, CURLOPT_HEADER, 1);
// show request headers, will display all the outgoing info, including fields
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

// Make the request
$data = curl_exec($ch);
$errors = curl_error($ch);
// get info about the transfer, for debugging purposes
$details = curl_getinfo($ch); 

curl_close($ch);

// Displaying debugging info
var_dump($data);
var_dump($errors);
var_dump($details);

有关我的经验的更多详细信息,请参阅使用CURL和NuSoap从PHP发布有关authorizingcalling MS SPS web service的帖子。