2010-06-11 3 views
2

를 사용하여 HTTPS를 통해 PHP에서 WSDL을 호출하면 나는 웹 서비스에 연결을 시도하고 때 나는 항상 다음 오류를 얻을젠드 비누 클라이언트

SOAPFault의 예외 다음의 보안을 검증 할 때 오류가 발생했습니다 : [보낸 사람의] 메시지

, 전체 비누 요청을 보내 나는 또한 보안 헤더를 사용할 필요가

입니다 :

내 사용자 이름과 암호가 올바른지, 나는 allready 이후 만료 날짜를 변경하려고 노력하고 있지만 그 해결되지 않는

<env:Envelope> 
<env:Header> 
<ns2:Action env:mustUnderstand="1"> 
http://ws.agiv.be/crabtools/ICRABTools/GetAddressLocation 
</ns2:Action> 
<ns2:MessageID>urn:uuid:10000001blsd-ghfs</ns2:MessageID> 
<ns2:ReplyTo> 
<ns2:Address> 
http://www.w3.org/2005/08/addressing/anonymous      
</ns2:Address> 
</ns2:ReplyTo> 
<ns2:To>https://grab.beta.agiv.be/Tools/CRABTools.svc</ns2:To> 
<o:Security env:mustUnderstand="1"> 
<wsu:Timestamp env:mustUnderstand="1"> 
<wsu:Created>2010-06-09T13:44:19Z</wsu:Created> 
<wsu:Expires>2010-06-09T13:49:19Z</wsu:Expires> 
</wsu:Timestamp> 
<o:UsernameToken> 
<o:Username>myUsername</o:Username> 
<o:Password>myPassword</o:Password> 
</o:UsernameToken> 
</o:Security> 
</env:Header> 
<env:Body> 
<ns1:GetAddressLocation> 
<ns1:houseNumberId>2306852</ns1:houseNumberId> 
</ns1:GetAddressLocation> 
</env:Body> 
</env:Envelope> 
그것.

이 결함의 원인은 무엇입니까?

어쩌면 내 PHP 코드에서 더 많은 것들을 구성해야합니다.

나는 Zend_Soap_Client

public function __soapCall($function_name, $arguments, $options=null, $input_headers=null, $output_headers=null) { 
     $inputheaders = array($this->wsactionheader(),$this->unencryptedSecurityHeader()); 
     $result = parent::__soapCall($this->functionname, $arguments, $options, $inputheaders); 
     return $result; 
    } 
+0

Zend__Soap_client를 무시하고 내 질문을 업데이트했습니다. –

답변

0

당신이 연결을 시도하는 서버의 종류를 알려 경우 도움이 될를 재정의하는 클래스를 만들었습니다. 여기에 요청 헤더를 제공하십시오. 이

echo "REQUEST HEADERS:\n" . $client->getLastRequestHeaders() . "\n"; 
echo "REQUEST:\n" . $client->getLastRequest() . "\n"; 

등의 사용 코드는 당신이 할 수있는 것은 :

1) 당신이 당신의 비누 클라이언트에서 WSDL을 지정했는지 확인하십시오.

2) "네임 스페이스"문제 일 수 있습니다. 확인하여 SOAP 요청 (WSDL에 지정) 서버와 같은 "봉투"형식을 사용하고 있는지, 즉 체크 네임 스페이스는

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:env="http://www.w3.org/2003/05/soap-envelope" 

네임 스페이스가 명시 적으로 피하려고 당신의 WSDL에있는 것과 다른 경우

같은 속성 Zend_Soap_Client에 싸여있는 내장 PHP SoapClient에서 'soap_version'을 지정합니다. 전자는 항상 'soap_version'을 지정합니다. 결과는 xmlns:env="http://www.w3.org/2003/05/soap-envelope"

입니다. 3) XML 예제 및/또는 전체 HTTP 추적을 요청하고 귀하의 것과 비교하십시오.