2016-09-29 2 views
1

SOAPヘッダーのスキーマまたは定義を含まないWSDLが指定されていますが、エンドポイントにはWSSE型のヘッダーが必要です。私はこれらの要求を処理するためにSoapClientを使用しています。型定義または名前空間なしのSoapVar/SoapHeaderでの属性の許可

すべての要求は、そのヘッダにこれを含める必要があります。

<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
    <wsse:UsernameToken> 
     <wsse:Username>Username</wsse:Username> 
     <wsse:Password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password> 
    </wsse:UsernameToken> 
</wsse:Security> 

私がダウンして行くルートはStackOverflowのとオンラインのPHPのドキュメンテーションコメントにまたがる複数回を示唆している場合、私が得ることができる最も近いです:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="..." xmlns:ns2="..." xmlns:ns3="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
    <SOAP-ENV:Header> 
     <ns3:Security> 
      <ns3:UsernameToken> 
       <ns3:Username>Username</ns3:Username> 
       <ns3:Password>Password</ns3:Password> 
      </ns3:UsernameToken> 
     </ns3:Security> 
... 

与えられたspec/exampleが具体的にはSecurity要素に名前空間を追加している間に、名前空間をsoapエンベロープに追加する方法に注目してください。私はこれが問題だとは思わない。いずれにしても、Password要素にはtype属性がありません。 私も使用して、アレイルートを下って試してみた:

として生成
$securityNamespace = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; 

// ... 

$password = new \SoapVar(
    [ 
     '_' => 'Password', 
     'type' => 'http://...' 
    ], 
    SOAP_ENC_OBJECT, 
    null, 
    $securityNamespace, 
    null, 
    $securityNamespace 
); 

のSoapClientを検証したい要素のタイプを見つけることができないとき、明らかに典型的な応答である
<value> 
    <item> 
     <key>_</key> 
     <value>PASSWORD</value> 
    </item> 
    <item> 
     <key>type</key> 
     <value>http://...</value> 
    </item> 
</value> 

を。

WSDLと付随するXSDはキャッシュ目的でローカルに保存されますが、可能であればWSSEヘッダーを含めるようにWSDLを変更する価値がありますか、これに対して正しいSOAPヘッダーを生成する別の論理的な方法があります名前空間/ XSDスキーマ?

+0

エンドポイントは、WSDLにヘッダー情報が含まれていない理由を明示しています。1)オプションです。2)認証を定義しないでください。サービス。 – Sean

答えて

0

https://github.com/goetas-webservices/soap-clientはPHPのext-soapに依存しない完全なPHP SOAPクライアントです。

すでにサポートされているのはPSR7、マルチクライアントで、IDE経由でタイプヒント用のクラスを生成することができます。

https://github.com/goetas-webservices/soap-client-demoは、クライアントを使用して汎用SOAP Webサービスを使用する方法を確認できるデモプロジェクトです。

関連する問題