SOAP クライアントで SOAP API ポリシー/拡張要件を提供する方法
P粉511896716
2023-08-29 20:09:01
<p>ソープ API に接続する必要があります...これまで何度かソープ API を使用しましたが、API の 99% が現在停止しているため、ここ数年は使用していません</p> ;
<p>SOAP クライアントを使用して API を呼び出すと、</p> が返されます。
<pre class="brush:php;toolbar:false;">SOAP-ERROR: WSDL を解析中: 不明な必要な WSDL 拡張子 'http://schemas.xmlsoap.org/ws/2004/09/policy'</前>
<p>ブラウザで wsdl アドレスを開くと (ログイン/パスワードで保護されています)、XML 出力に次の行が表示されます</p>
<pre class="brush:php;toolbar:false;"><wsdl:settings xmlns:p1="urn:haixin:all2crm" xmlns:wsp="http://schemas.xmlsoap.org/ ws/2004/09/policy" "http://schemas.xmlsoap.org/wsdl/" name="SI_USBPC_REQUEST" targetNamespace="urn:haixin:all2crm">
<wsdl:documentation/>
<wsp:UsingPolicy wsdl:required="true"/>
<wsp:Policy wsu:Id="OP_SI_USBPC_REQUEST"/></pre>
<p>どこにあるか</p>
<pre class="brush:php;toolbar:false;"><wsp:Policy>
<wsp:PolicyReference URI="#OP_SI_USBPC_REQUEST"/>
</wsp:ポリシー></pre>
<p>このエラーを検索すると、インターネット全体でポリシー要件をオフにするという答えが得られるリソースが 1 つだけ見つかります。それは、<code><wsp:UsingPolicy wsdl:required="false" です。 "/> </code> しかし、私は API を所有していないので、ポリシー名 <code>OP_SI_USBPC_REQUEST</code> を検索しても問題はなく、結果が得られないので、これは API 所有者によって設定されていると思います。 いくつかのカスタム名</p>
<p>そこで私の質問は、ポリシーを作成して SOAP クライアントのリクエストに添付する必要があるかということです。
拡張機能が見つからないというエラーが発生しますが、ポリシー要件をオフにするとエラーは解消されます。ポリシーと拡張機能の関係は何ですか </p>
<p>拡張機能をダウンロードできる場所はありますか?形式は何ですか...SOAP クライアント リクエストに追加する必要がありますか? </p>
<p>それともサーバーにインストールする必要があるのでしょうか?何らかの方法で拡張機能を追加した場合、API 呼び出しにユーザー名/パスワードを追加したためエラーは解消されますか、それともこれは最初のステップにすぎず、その後ポリシー要件を処理する必要があるのでしょうか?</p>
<p>ちなみに、API の呼び出しには php を使用しています。これが私のコードです</p>
<pre class="brush:php;toolbar:false;">$options = [
'ログイン' => 'mログイン'、
'パスワード' => '私のパスワード',
];
$client = new \SoapClient("http://domain:port/dir/wsdl/?p=sa/92130e1ffa97338ba2d1fc026567031d" , $options );</pre>
<p>XML をダウンロードしてローカル ファイルの要件をオフにし、そのファイル アドレスを SOAP クライアントで使用した場合、そのファイルを使用して API と通信できますか? (私の理解では、XML には実際のデータは含まれておらず、単なる SOAP クライアントのインターフェイス/定義であり、オンライン API と通信するためにローカル ファイルを使用することはできません。それとも私が間違っているのでしょうか?) < ;/p>
「不明な必要な WSDL 拡張子」というメッセージは、SoapClient が外部で要素を見つけたことを意味します WSDL 名前空間の
wsdl:required
プロパティはtrue
に設定されます。 (ここをご覧ください)。したがって、このエラーを回避するには、
wsdl:required
プロパティをfalse
に設定することが 1 つの方法です。WSDL ファイルをダウンロードして変更し、ローカル コピーを使用することは完全に可能です。必ず使用してください ここに示されている絶対パス。
ちなみに、ここでの「ポリシー」とは、WS-Policy 仕様のことを指します。