2013-05-22 3 views
1

그래서 엔터프라이즈 환경에서 수행하고자하는 작업은 wsdl 모드에서 PHP 클래스 SoapClient를 사용하여 SAP 웹 서비스에 연결하는 것입니다.SOAP with PHP with SAP 웹 서비스

지금까지 내가 수행 한 작업은 "누락 된 속성"오류가 발생하는 것입니다. 누락 된 모든 속성 오류를 해결하면 내가 몸과 지칠대로 지친 HTTP 오류 500 무엇입니까 : 비누-ENV를 :

:

class SapTest { 
const SAP_WSDL_URI = *wsdl_uri*; 
const SAP_USER = *username*; 
const SAP_PWD = *password*; 

public function execute() { 

     $client = new SoapClient('http://'.urlencode(self::SAP_USER).':'.urldecode(self::SAP_PWD).'@'.self::SAP_WSDL_URI, 
       array("trace" => 1, 
         "exceptions" => 1, 
         "login" => self::SAP_USER, 
         "password" => self::SAP_PWD, 
         'features' => SOAP_SINGLE_ELEMENT_ARRAYS) 
     ); 

     $method = '_-bic_-nf2'; 

     $parameter = array('ETColumnDescription' => null, 
          'ETGridData' => null, 
          'ETMessageLog' => null, 
          'ETRowDescription' => null, 
          'ISVar_01xwerbet' => array('Sign' => 'I', 
                 'Option' => 'LE', 
                 'Low' => '3', 
                 'High' => null)); 

     try 
     { 

     $result = $client->$method($parameter); 
     print_r($result); 
     } catch(SoapFault $e) { 

     echo "REQUEST HEADER:\n" . $client->__getLastRequestHeaders() . "\n"; 
      echo "REQUEST:\n" . $client->__getLastRequest() . "\n"; 

      echo "RESPONSE HEADER:\n" . $client->__getLastResponseHeaders() . "\n"; 

      echo "RESPONSE:\n" . $client->__getLastResponse() . "\n"; 
     print_r($e); 
    } 


} 

} 

$oSap = new SapTest(); 
$oSap->execute(); 

내 XML 출력은 다음과 같습니다 : 서버

것은 그래서 내 코드입니다 이 경우 나는 확실하지 않다

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style"> 
<soapenv:Body> 
    <urn:_-bic_-nf2> 
    <ETColumnDescription/> 
    <ETGridData/> 
    <ETMessageLog/> 
    <ETRowDescription/> 
    <ISVar_01xwerbet> 
    <Sign>I</Sign> 
    <Option>LE</Option> 
    <Low>3</Low> 
    <High/> 
    </ISVar_01xwerbet> 
    </urn:_-bic_-nf2> 
</soapenv:Body> 
</soapenv:Envelope> 

:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:sap-com:document:sap:soap:functions:mc-style"> 
<SOAP-ENV:Body> 
    <ns1:_-bic_-nf2> 
    <ETColumnDescription/> 
    <ETGridData/> 
    <ETMessageLog/> 
    <ETRowDescription/> 
    <ISVar_01xwerbet> 
    <Sign>I</Sign> 
    <Option>LE</Option> 
    <Low>3</Low> 
    <High/> 
    </ISVar_01xwerbet> 
    </ns1:_-bic_-nf2> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

예상되는 XML은 다음과 같아야합니다 누락 된 빈 헤더 태그, 기본 PHP로 추가 할 수없는 것 같습니다 (헤더를 추가 할 수 있지만 빈 헤더를 추가하는 것이 어려운 부분 인 것 같습니다). 또는 다른 접두사 (ns1/urn 또는 soapenv/SOAP-ENV)이지만이 문제에 대해 미쳐 가기 시작합니다. 도움을 많이 주시면 감사하겠습니다. 사전에

감사합니다!

답변

0

SOAP 요청이 적합합니다. ns1/urnsoapenv/SOAP-ENV은 네임 스페이스를 나타내는 접두사입니다. 다른 Webservice 엔진은 네임 스페이스 접두사를 다르게 생성하며 Webservice는이를 기대해야합니다.

SOAP 헤더는 웹 서비스의 필수 항목은 아니지만 서비스가 기대하는 경우 사용자가 제공해야합니다.

난 당신이 요청과 함께 무엇이 잘못되었는지에 대한 서비스 제공에 이야기하고 그게 가능하지 않을 경우 SOAPui처럼 SOAP 테스트 도구를 사용하는 것이 좋습니다 것입니다.

귀하의 답변을

$header =new SoapHeader('urn:sap-com:document:sap:soap:functions:mc-style', null); 
$client->__setSoapHeaders($header); 
+0

감사를 시도, 빈 SOAP 헤더 만들기, 빈 SOAP 헤더를 만들 수있는 방법은 무엇입니까? –

+0

업데이트 된 답변. –

+0

치명적인 오류가 발생합니다 :-(감사합니다, 다른 것을 시도해보십시오 –