PHP:SoapClient不再按预期工作
我对PHP不是很有经验,但大约一个月前,我编写了一个脚本,从SOAP Web服务中提取事件数据,显示在数字标牌上。几周来它一直运转良好,但最近坏了 以下是相关的PHP代码…PHP:SoapClient不再按预期工作,php,xml,web-services,soap,soapui,Php,Xml,Web Services,Soap,Soapui,我对PHP不是很有经验,但大约一个月前,我编写了一个脚本,从SOAP Web服务中提取事件数据,显示在数字标牌上。几周来它一直运转良好,但最近坏了 以下是相关的PHP代码… $WSDL_URL = 'http://anprodca.active.com/uofg/servlet/ActiveNetWS?wsdl'; $params = array( "ws_system_user" => $credentials, "resource_ids" => array(i
$WSDL_URL = 'http://anprodca.active.com/uofg/servlet/ActiveNetWS?wsdl';
$params = array(
"ws_system_user" => $credentials,
"resource_ids" => array(intval($facilityID)),
"dates" => $date,
"include_linked_resources" => 0,
"returning_render_customer_id" => 0
);
$soap = new SoapClient($WSDL_URL);
$response = $soap->wsGetResourceBookings($params);
。。。使用数组中包含用户名
、密码
、和保留有效期
值的$credentials
当我得到它时,我得到以下异常消息:看起来我们没有XML文档。我在stackoverflow上看到过类似的帖子,内容是关于由于不可见字符引起的错误响应问题,但这里的情况并非如此。\uu getLastResponse()
的响应似乎是某种重定向的HTML
我仍然能够使用SOAPUI获得所需的结果。以下是它在从生成的请求中传递的XML的示例:
我以为文件已经更改了,但没有。
服务器端没有任何变化,它仍然使用相同配置的相同版本的PHP,等等。我尝试禁用WSDL缓存以及NuSoap库,但没有任何效果。我似乎不明白为什么我不能使用SOAP客户端返回正确的响应。如有任何见解,将不胜感激,谢谢 我自己就能够解决这个问题——只要把它贴出来,以防有人遇到类似的问题
他们的WSDL文件指定了错误的端点URL。我只需要使用\uu setLocation()
显式指定它。现在我的PHP看起来像这样:
...
$soap = new SoapClient($WSDL_URL);
$soap->__setLocation($WSDL_URL);
$response = $soap->wsGetResourceBookings($params);
...
1行修复“来自_getLastResponse()的响应似乎是来自某种重定向的HTML”。。。如果服务突然给了你一个重定向,我不确定你希望这里的人帮你做什么。和管理它的人谈谈。也许他们限制了你呼叫的IP地址,也许他们完全做了其他的事情。“如果服务突然给你一个重定向,我不确定你希望这里的人帮你做什么”。。。我想弄明白为什么我可以使用SOAPUI而不是SoapClient/PHP获得有效的XML响应“也许他们限制了您从中调用它的IP地址”。。。如果SOAPUISOAPUI是一个客户端应用程序,那么它将无法工作——如果他们对服务器的IP地址设置了限制(不清楚您是否从其他地方尝试过SoapClient),那么它将不会对它产生任何影响。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:anw="http://ANWebServices/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ANWebServices/">
<soapenv:Header/>
<soapenv:Body>
<anw:wsGetResourceBookings>
<ws_system_user>
<keepAlive>false</keepAlive>
<password>password</password>
<userName>username</userName>
</ws_system_user>
<resource_ids>
<entries>27</entries>
</resource_ids>
<dates>09/25/2016</dates>
<include_linked_resources>0</include_linked_resources>
<returning_render_customer_id>0</returning_render_customer_id>
</anw:wsGetResourceBookings>
</soapenv:Body>
</soapenv:Envelope>
...
$soap = new SoapClient($WSDL_URL);
$soap->__setLocation($WSDL_URL);
$response = $soap->wsGetResourceBookings($params);
...