2016-09-25 2 views
1

저는 PHP에 익숙하지 않지만 약 한 달 전에 디지털 사이 니지에 표시 할 SOAP 웹 서비스의 이벤트 데이터를 가져 오기위한 스크립트를 작성했습니다. 그것은 2 주 동안 잘 일하고 있었다. 그러나 그것은 최근 파산했다.PHP : SoapClient가 더 이상 예상대로 작동하지 않습니다.

여기 $credentials 배열에 userName, passwordkeepAlive 값 함유 ...

$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); 

관련 PHP 코드이다.

나는 그것을 얻을 때 다음과 같은 예외 메시지가 나타납니다 : looks like we got no XML document. 난 성가신 보이지 않는 문자로 인해 조작 된 응답 문제에 대한 stackoverflow 비슷한 게시물을 본 적이 있지만 여기의 경우가 아닙니다. __getLastResponse()의 응답은 일종의 리디렉션에서 HTML로 나타납니다.


나는 여전히 SOAPUI를 사용하여 원하는 결과를 얻을 수 있어요.

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ANWebServices/"> 
    <SOAP-ENV:Body> 
     <ns1: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> 
     </ns1:wsGetResourceBookings> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

내가 함께 전달하는 경우도 괜찮 았는데 다음과 같은 XML을 가지고 SoapClient와 추적 옵션 __getLastRequest() 사용 : 다음은이 WSDL URL에서 생성 요청에 따라 전달하는 XML의 예입니다 SOAPUI ...

<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> 

나는 WSDL 파일이 변경되었지만 변경되지 않았다고 가정했습니다. 아무것도 서버 측에서 변경되지 않았습니다. 동일한 구성을 가진 PHP와 동일한 버전의 PHP를 계속 사용하고있었습니다. WSDL 캐싱을 비활성화하고 NuSoap 라이브러리를 사용하지 않으려 고 시도했습니다. 왜 SoapClient를 사용하여 적절한 응답을 얻기 위해 PHP를 사용할 수 없는지 알 수 없습니다. 어떤 통찰력이라도 고맙게 여길 것입니다, 고마워요!

+0

*이 서비스를 제공하는 경우 * ... "__getLastResponse()의 응답은 어떤 종류의 리디렉션에서 HTML을 것으로 보인다" 내가 갑자기 여기에서 사람들이 당신을 도울 것으로 기대하는 것이 확실하지 않습니다. 그것을 실행하는 사람들에게 이야기하십시오. 아마 그들은 당신이 그것을 호출하는 IP 주소의 속도를 제한했을 것입니다. 아마도 그들은 완전히 다른 것을했을 것입니다. –

+0

"서비스가 당신에게 리다이렉트를 주면서 갑자기 내가 여기있는 사람들이 당신을 도울 것으로 기대하는지 확신 할 수 없다면 ..."왜 SOAPUI를 사용하여 유효한 XML 응답을 얻을 수 있는지 알기 위해 찾고 있습니다. "아마도 그들이 호출 한 IP 주소의 속도를 제한했습니다."... SOAPUI에서는 작동하지 않습니다. – jkwill87

+0

SOAPUI는 클라이언트 측 응용 프로그램입니다. 귀하의 서버의 IP 주소 (다른 곳에서 SoapClient를 시도한 것이 확실하지 않은 경우) 아무런 효과가 없습니다. –

답변

1

나만의 방법으로이 문제를 해결할 수있었습니다. 비슷한 문제가있는 사람을 위해 게시 할 수 있습니다.

WSDL 파일에서 잘못된 끝점 URL을 지정했습니다. 방금 __setLocation()을 사용하여 명시 적으로 지정해야했습니다. 이제 내 PHP는 다음과 같이 보입니다 :

... 
$soap = new SoapClient($WSDL_URL); 
$soap->__setLocation($WSDL_URL); 
$response = $soap->wsGetResourceBookings($params); 
... 

1 라인 수정을

+0

답변으로 표시 할 수 있습니다. – Rao

관련 문제