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