2013-09-26 3 views
2

SOAP 요청의 헤더가 이상한 형식으로 표시됩니다.SOAP 요청 헤더의 형식이 올바르지 않습니다. (<item>, <key> 및 <value>)

<soap-env:header> 
    <wsse:security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:usernametoken wsu:id="UsernameToken-45"> 
      <wsse:username>817221</wsse:username> 
      <wsse:password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1234</wsse:password> 
     </wsse:usernametoken> 
    </wsse:security> 
    </soap-env:header> 

는 지금, 헤더는 다음과 같습니다 : 그것은 너무 잘못

<SOAP-ENV:Header> 
    <ns8:Security SOAP-ENV:mustUnderstand="1"> 
     <item> 
      <key>UsernameToken</key> 
      <value> 
       <item> 
        <key>Username</key> 
        <value>817221</value> 
       </item> 
       <item> 
        <key>Password</key> 
        <value> 
         <item> 
          <key>_</key> 
          <value>1234</value> 
         </item> 
         <item> 
          <key>Type</key> 
          <value>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText</value> 
         </item> 
        </value> 
       </item> 
      </value> 
     </item> 
    </ns8:Security> 
</SOAP-ENV:Header> 

I는 다음과 같습니다 헤더가 있어야합니다. 여기에는 태그가 들어 있습니다. SOAP_ENC_OBJECT를 올바른 형식으로 표시하여 내 코드에서 시도했지만 여전히 작동하지 않는다는 것을 읽었습니다. 아래 코드를 참조하십시오 :

$header = array(
      'UsernameToken' => array(
       'Username' => 817221, 
       'Password' => array(
         '_' => 1234, 
         'Type' => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'))); 

$headerSoapVar = new SoapVar($header,SOAP_ENC_OBJECT); 
$soapheader = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', "Security" , $header, true); 
$client->__setSoapHeaders($soapheader); 

어떤 도움을 주시면 감사하겠습니다. 감사!

답변

2

이것은 꽤 오래된 질문입니다!

그러나 오늘 저는이 문제가 매우있었습니다!

"헤더"는 배열이 아니라 객체 여야한다는 것을 알았습니다! 나는 아직도 네임 스페이스에 대한 문제가 있었다 그러나

는 ... 그래서 하위 클래스라는 SoapClient 클래스

class MySoapClient extends SoapClient { 

    public function __doRequest($request, $location, $action, $version, $one_way=0) { 
     // manipulate $request var using XML parse tools or whatever !! 
     return parent::__doRequest($request, $location, $action, $version, $one_way); 
    } 
} 

난 아직도이 밖으로 작동하고 그것을 밖으로 일했다,하지만 난 그것을 누군가 도움이되기를 바랍니다!

0

시도해보십시오. 개체로 설정해야합니다.

$header = (object) array(
      'UsernameToken' => array(
       'Username' => 817221, 
       'Password' => array(
         '_' => 1234, 
         'Type' => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'))); 
관련 문제