基本認証の背後にある WSDL から php クラスを構築する必要があります。
大量の名前空間があるため、これを手動で行うのは面倒に見えます。
いくつかのツールを試しましたが、認証セッションが持続していないようです。
基本認証の背後にある WSDL から php クラスを構築する必要があります。
大量の名前空間があるため、これを手動で行うのは面倒に見えます。
いくつかのツールを試しましたが、認証セッションが持続していないようです。
HTTP 認証は SOAP クライアントで動作しますが、パスワードで保護された WSDL ファイルにはアクセスできません
組み込みの SOAP クライアントを使用すると、次のようになります。
$options = array(
'login' => $username,
'password' => $password,
);
$client = new SoapClient($wsdl, $options);
lib nusoapを使用してこれを解決しました。それが役立つかどうかを確認してください
$params = array(
"param" => "value"
);
$soap_client = new nusoap_client($wsdl_url, true);
$soap_client->setCredentials(USER_SERVICE, PASS_SERVICE, 'basic');
$soap_client->soap_defencoding = 'UTF-8'; //Fix encode erro, if you need
$soap_return = $soap_client->call("method_name", $params);
この解決策はどうですか:
このようなもの(簡略版):
class MySoap {
private $WSDL = 'https://secure-wsdl.url?wsdl';
private $USERNAME = 'dummy';
private $PASSWORD = 'dummy';
private $soapclient;
private function localWSDL()
{
$local_file_name = 'local.wsdl';
$local_file_path = 'path/to/file/'.$local_file_name;
// Cache local file for 1 day
if (filemtime($local_file_path) < time() - 86400) {
// Modify URL to format http://[username]:[password]@[wsdl_url]
$WSDL_URL = preg_replace('/^https:\/\//', "https://{$this->USERNAME}:{$this->PASSWORD}@", $this->WSDL);
$wsdl_content = file_get_contents($WSDL_URL);
if ($wsdl_content === FALSE) {
throw new Exception("Download error");
}
if (file_put_contents($local_file_path, $wsdl_content) === false) {
throw new Exception("Write error");
}
}
return $local_file_path;
}
private function getSoap()
{
if ( ! $this->soapclient )
{
$this->soapclient = new SoapClient($this->localWSDL(), array(
'login' => $this->USERNAME,
'password' => $this->PASSWORD,
));
}
return $this->soapclient;
}
public function callWs() {
$this->getSoap()->wsMethod();
}
}
わたしにはできる :)
これは、soapClient を使用して Web サービスを認証する簡単な例です。
$apiauth =array('UserName'=>'abcusername','Password'=>'xyzpassword','UserCode'=>'1991');
$wsdl = 'http://sitename.com/service.asmx?WSDL';
$header = new SoapHeader('http://tempuri.org/', 'AuthHeader', $apiauth);
$soap = new SoapClient($wsdl);
$soap->__setSoapHeaders($header);
$data = $soap->methodname($header);
このコードは、次のようにヘッダーを内部的に解析します
<soap:Header>
<AuthHeader xmlns="http://tempuri.org/">
<UserName>abcusername</UserName>
<Password>xyzpassword</Password>
<UserCode>1991</UserCode>
</AuthHeader>
</soap:Header>