PHP의 내장 SOAP 클라이언트는 SAP 시스템에서 생성한 WSDL에 포함된 정책(Policy) 확장 태그를 지원하지 않습니다. 이로 인해 PHP SoapClient로 SAP 웹 서비스를 호출하려고 하면 WSDL 파싱 오류가 발생할 수 있습니다. 다행히 몇 가지 간단한 방법으로 이 문제를 해결할 수 있습니다.
해결 방법 1: 정책 태그의 required 속성 변경
WSDL 파일에서 정책 태그를 찾아 다음과 같이 선언되어 있는 부분을
<wsp:UsingPolicy wsdl:required="true"/>
다음과 같이 변경합니다.
<wsp:UsingPolicy wsdl:required="false"/>
wsdl:required 속성을 false로 바꾸면 클라이언트가 해당 정책 확장을 필수 요건으로 처리하지 않게 됩니다. 수정을 마친 후 서비스를 다시 호출해 정상적으로 동작하는지 확인하세요.
해결 방법 2: WSDL 요청 URL을 /ws_policy/에서 /standard/로 변경
또 다른 효과적인 방법은 WSDL을 요청하는 URL에서 /ws_policy/ 경로를 /standard/로 교체하는 것입니다. 이렇게 하면 정책 태그가 포함되지 않은 WSDL을 받게 되므로, PHP Soap Client를 사용해 웹 서비스를 문제없이 소비(consume)할 수 있습니다.
SAP ECC에서 웹 서비스 관리 화면 열기
SAP ECC 시스템에서 SOAMANAGER 트랜잭션 코드를 실행하여 SOA 관리(SOA-Management) 화면으로 이동한 뒤, 웹 서비스 관리(Web Service Administration) 메뉴를 엽니다.


URL에서 ws_policy를 standard로 교체
브라우저 주소창의 URL을 살펴보면 “ws_policy” 항목을 확인할 수 있습니다. 이 부분을 “standard”로 바꾸면 정책 태그가 제거된 WSDL을 얻을 수 있습니다.

정리
PHP SOAP 클라이언트와 SAP 웹 서비스 간의 호환성 문제는 대부분 WSDL의 정책 확장 태그에서 비롯됩니다. WSDL 파일의 wsp:UsingPolicy 태그에서 wsdl:required 속성을 false로 변경하거나, 요청 URL의 /ws_policy/를 /standard/로 교체하는 두 가지 방법 중 상황에 맞는 방식을 선택하면 손쉽게 문제를 해결할 수 있습니다.