去年我创建了一个 PHP 项目,该项目使用 Exchange Web 服务与 Exchange 2010 Server 进行交互。我刚刚回到这个项目,当我尝试使用 php-ews 中的任何一个时方法,我得到这个错误:
SoapClient::__doRequest() returned non string value
我不完全理解所有 SOAP 和 CURL 代码是如何工作的,所以任何人都可以给我一些关于如何解决这个问题的指导吗?
我尝试过的事情
当我在 Web 浏览器中转到 SOAP 请求发送到的 URL 时,我被警告它没有有效的证书,所以我在我的 NTLMSoapClient 和 NTLMStream 中都放置了以下代码:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
但我仍然收到同样的错误。
当我在网络浏览器中浏览到该地址并忽略证书警告时,系统提示我输入密码,它似乎只接受管理员密码,然后它将我重定向到 services.wsdl。
将我的代码中的用户名和密码更改为管理员用户名和密码没有任何区别。
最佳答案
我曾经从事过类似的项目,但涉及 PHP 和 MS Sharepoint 网络服务。 我用了NuSoap有助于使用 SOAP 的库。
我没有使用 PHP EWS 的经验,但我建议您查看请求和响应代码、数据和 header ,以了解您发送和接收的内容。此信息可能会帮助您找到问题(是身份验证错误还是无法获取 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);
有关我的经历的更多详细信息,请参阅我关于 authorizing 的帖子和 calling MS SPS web service从 PHP 使用 CURL 和 NuSoap。
关于php - 如何排除 PHP-EWS/SOAP 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5508287/