WSDL
ファイルをダウンロードするときにPHPがストリームコンテキストを無視するという問題があります。この問題を回避するには、WSDL
ファイルをダウンロードすることで、ローカルファイルシステム(私はかなりXMLを印刷するには、ここtidy
を使用しています)へのすべてのスキーマをインポート:
wget --secure-protocol=SSLv3 https://winsystemsintl.com:54904/PSAService.svc?wsdl --no-check-certificate -O - | tidy -xml -indent > PSAService.svc?wsdl
wget --secure-protocol=SSLv3 https://winsystemsintl.com:54904/PSAService.svc?xsd=xsd0 --no-check-certificate -O - | tidy -xml -indent > PSAService.svc?xsd=xsd0
wget --secure-protocol=SSLv3 https://winsystemsintl.com:54904/PSAService.svc?xsd=xsd1 --no-check-certificate -O - | tidy -xml -indent > PSAService.svc?xsd=xsd1
wget --secure-protocol=SSLv3 https://winsystemsintl.com:54904/PSAService.svc?xsd=xsd2 --no-check-certificate -O - | tidy -xml -indent > PSAService.svc?xsd=xsd2
wget --secure-protocol=SSLv3 https://winsystemsintl.com:54904/PSAService.svc?xsd=xsd3 --no-check-certificate -O - | tidy -xml -indent > PSAService.svc?xsd=xsd3
次に、あなたはPSAService.svc?wsdl
(ファイル名を編集する必要がそのwgetは保存されます)、Webではなくローカルシステムを指すようにインポートを変更します。あなたの好きなエディタで置き換え、すべての機能を使用して置き換える'https://winsystemsintl.com:54904/'
''
と:
例 前:
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="https://winsystemsintl.com:54904/PSAService.svc?xsd=xsd0"
namespace="http://tempuri.org/" />
<xsd:import schemaLocation="https://winsystemsintl.com:54904/PSAService.svc?xsd=xsd1"
namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xsd:import schemaLocation="https://winsystemsintl.com:54904/PSAService.svc?xsd=xsd2"
namespace="http://schemas.datacontract.org/2004/07/PSA.Service.MessageObjects.Pregunta" />
<xsd:import schemaLocation="https://winsystemsintl.com:54904/PSAService.svc?xsd=xsd3"
namespace="http://schemas.datacontract.org/2004/07/PSA.Service.MessageObjects.Respuesta" />
</xsd:schema>
</wsdl:types>
後:
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="PSAService.svc?xsd=xsd0"
namespace="http://tempuri.org/" />
<xsd:import schemaLocation="PSAService.svc?xsd=xsd1"
namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xsd:import schemaLocation="PSAService.svc?xsd=xsd2"
namespace="http://schemas.datacontract.org/2004/07/PSA.Service.MessageObjects.Pregunta" />
<xsd:import schemaLocation="PSAService.svc?xsd=xsd3"
namespace="http://schemas.datacontract.org/2004/07/PSA.Service.MessageObjects.Respuesta" />
</xsd:schema>
</wsdl:types>
繰り返しのためにそれぞれのファイルダウンロードされました。
次に、(私はすべてのPHP/WSDLファイルが同じフォルダ内にあることを、ここで仮定)、次のようにコードを変更:今SoapClient
はウェブからWSDL
をダウンロードスキップした
$opts = [
'ssl' => [
// set some SSL/TLS specific options
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
],
'http'=>[
'user_agent' => 'PHPSoapClient'
]
];
// Initialize Soap Client
$client = new SoapClient('PSAService.svc?wsdl', array('ssl_method' => SOAP_SSL_METHOD_SSLv3,'soap_version' => SOAP_1_2, 'location' => 'https://winsystemsintl.com:54904/PSAService.svc','stream_context' => stream_context_create($opts), 'exceptions' => true, 'trace' => true));
var_dump($client->__getFunctions());
、そしてあなたストリームコンテキストを使用して通話を開始する準備が整いました。
また、MITM攻撃に身を任せることもできます。 :/ – miken32
はい、それは本当ですが、私は実際には本番環境でこれをしませんが、開発者が自己署名証明書を使用する必要がある場合は、テスト目的に役立ちます。 –
おっとこれまでのコメントは編集できませんが、これは完全なコメントです:こんにちはクリス、ありがとうございましたが、今度はこのエラー「ホストに接続できませんでした」が表示されます。私はそれがwebservice証明書の問題かもしれないと思うので、私はそれらと話し、彼らはそれをテストする生産Webサービスのテスト資格を与えます、はい私は生産webserviceに何の問題もなく接続することができます...もう一度ありがとう。 – Nerea