编程语言
首页 > 编程语言> > 如何解决PHP-EWS / SOAP错误?

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

作者:互联网

去年,我做了一个PHP项目,该项目使用Exchange Web Services与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);

但是我仍然收到相同的错误.

当我在Web浏览器中浏览到该地址并忽略证书警告时,系统提示我输入密码,并且该密码似乎仅接受管理员密码,然后将我重定向到services.wsdl.

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

解决方法:

我曾经从事过类似的项目,但是涉及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的文章.

标签:curl,exchangewebservices,php,soap
来源: https://codeday.me/bug/20191208/2092427.html