PHPの場合:エラーが発生します:
SOAP-ERROR:WSDLの解析: ' http://xxx.xxxx.asmx?WSDL 'からロードできませんでした:外部エンティティ " http://xxx.xxxx .asmx?WSDL "
私のコードは:
<?php
header('Content-Type: text/plain');
if (!class_exists('SoapClient')) {
die ("You haven't installed the PHP-Soap module.");
}
ini_set('max_execution_time', 1);
try {
$options = array(
'soap_version' => SOAP_1_2,
'exceptions' => true,
'trace' => 1,
'cache_wsdl' => WSDL_CACHE_NONE
);
$client = new SoapClient('http://xxx.xxxx.asmx?WSDL', $options);
// Note where 'CreateIncident' and 'request' tags are in the XML
$results = $client->CreateIncident(
array(
'FirstName' => 'gyaan',
'LastName' => 'p',
'Email' => '[email protected]',
'QueryProductClass' => 'QueryProductClass',
'ChannelCode' => 12,
'CampaignCode' => 234,
'Lob' => 'Lob',
'PackageName' => 'SEONI',
'PackageCode' => 'SMP',
'TravelYear' => 2012,
'TravelMonth' => 06,
'TravelDay' => 29,
'CityOfResidence' => 'Jabalpur',
'ncidentNotes' => 'testing ignor this',
'MobilePhone' => '1234567890',
'DepartureCity' => 'bangalore',
'NoOfDaysTravel' => '3 Days',
'VendorName' => 'TEST HIQ'
)
);
}
catch (Exception $e) {
echo "<h2>Exception Error!</h2>";
echo $e->getMessage();
}
?>
私がどこで間違いを犯しているか教えてください
WAMP設定でこれを解決するには、php_openssl
拡張子。使用したURLから読み込んだためhttps://
。
私はこの問題を抱えており、把握するのに何時間もかかりました。このエラーの主な理由は、SoapClientがホストからWebサービスファイルをストリーミングできないことです。 php.iniファイルのこの行「extension = php_openssl.dll」のコメントを外し、機能します。
これを試して:
$Wsdl = 'http://xxxx.xxx.xx/webservice3.asmx?WSDL';
libxml_disable_entity_loader(false); //adding this worked for me
$Client = new SoapClient($Wsdl);
//Code...
まったく同じエラーメッセージが表示されました。私の場合、/etc/hosts
ファイルで修正されたWSDLで参照されているターゲットサーバーの(サービスをホストしているサーバー上)。
奇妙な言葉遣いのエラーメッセージの種類。
Localhostでそれを使用する場合は、WAMPを使用します。
次に、トレイアイコン> PHPサービス>をクリックして、以下を有効にします。
追伸一部の無料のWebホスティングにはこれらのオプションがない場合があります
私は同じエラーを取得し、php.iniファイルの石鹸設定を探して解決しましたsoap.wsdl_cache_enabled = 1をsoap.wsdl_cache_enabled =に変更しました
このコードを追加してみてください。それは私のために働いた。
$opts = array(
'ssl' => array('ciphers'=>'RC4-SHA', 'verify_peer'=>false, 'verify_peer_name'=>false)
);
// SOAP 1.2 client
$params = array ('encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_2, 'trace' => 1, 'exceptions' => 1, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts) );
$url = "http://www.webservicex.net/globalweather.asmx?WSDL";
try{
$client = new SoapClient($url,$params );
}
catch(SoapFault $fault) {
echo '<br>'.$fault;
}
これらすべてをphp.ini設定ファイルから有効にします
extension=php_openssl.dll
extension=php_curl.dll
extension=php_xmlrpc.dll
dnsエントリをシステムのhostsファイルに追加します
たとえば:http://aaa.com/service.asmx?WSDL
pingでaaa.comのIPアドレスを取得できます
そしてhostsファイルに追加します
同じエラーが出ました
Magento WebService APIに接続できませんでした:SOAPエラー:WSDLの解析: 'example.com/api/soap/?wsdl'からロードできませんでした:外部エンティティ "example.com/api/soap/?wsdlのロードに失敗しました」
magentoのルートURLを更新すると問題が解決しました
example.com/index.php/api/soap/?wsdl
はい、エラーの原因となるindex.phpがありませんでした。
同様のエラーも。特定のホスト用に.htpasswdがセットアップされていることに気付きました。 .htaccessファイルからコメントを外し、正常に機能しました。
このオプションは、wdslを使用してsoapを呼び出すために使用できます。
$opts = array(
'http' => array(
'user_agent' => 'PHPSoapClient'
)
);
$context = stream_context_create($opts);
$soapClientOptions = array(
'stream_context' => $context,
'cache_wsdl' => WSDL_CACHE_NONE
);
$wsdlUrl = 'your wsdl url';
$soapClient = new SoapClient($wsdlUrl, $soapClientOptions);
$result = $soapClient->VerifyTransaction($refNum, $MerchantCode);
以前の応答で述べたように、このエラーは、HTTPS接続を介してSOAPサービスと対話するときに発生する可能性があります。接続に問題が識別されます。 )またはクライアント(CAまたはPEMファイルがない場合)。 http://php.net/manual/en/context.ssl.php を参照して、可能なすべてのSSLコンテキスト設定を確認してください。場合、ローカル証明書へのパスを設定すると問題が解決しました:
$context = ['ssl' => [
'local_cert' => '/path/to/pem/file',
]];
$params = [
'soap_version' => SOAP_1_2,
'trace' => 1,
'exceptions' => 1,
'connection_timeout' => 180,
'stream_context' => stream_context_create($context),
'cache_wsdl' => WSDL_CACHE_NONE, // eliminate possible issue from cached wsdl
];
$client = new SoapClient('https://remoteservice/wsdl', $params);