В PHP: я получаю сообщение об ошибке:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://xxx.xxxx.asmx?WSDL' : failed to load external entity "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'=>'aa@gmail.com', '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(); } ?>
-<?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'=>'aa@gmail.com', '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(); } ?>
Пожалуйста, скажите мне, где я делаю ошибку. Я новичок в WSDL и мыле
Я решил это на своей настройке WAMP, включив расширение php_openssl
, поскольку URL-адрес, который я загружал из используемого https://
.
У меня была эта проблема, и мне потребовались часы, чтобы понять. Главной причиной этой ошибки является то, что SoapClient не может передать файл веб-службы с хоста. Я раскомментировал эту строку «extension = php_openssl.dll» в моем файле php.ini, и она работает.
У меня было точно такое же сообщение об ошибке. В моем случае внесение записи в файл /etc/hosts
(на сервере, на котором размещена служба) для целевого сервера, на который ссылается WSDL, зафиксировал его.
Вид странно сформулированного сообщения об ошибке ..
Если вы хотите использовать это на localhost, используйте WAMP.
Затем щелкните значок в трее> Услуги PHP> и включите следующее:
ps какой-либо бесплатный веб-хостинг может не иметь этих опций
Попробуй это:
$Wsdl = 'http://xxxx.xxx.xx/webservice3.asmx?WSDL'; libxml_disable_entity_loader(false); //adding this worked for me $Client = new SoapClient($Wsdl); //Code...
Попробуйте добавить этот фрагмент кода. Это сработало для меня.
$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 и меняет soap.wsdl_cache_enabled = 1 на soap.wsdl_cache_enabled = 0
добавьте запись dns в файл системных хостов
например: http: //aaa.com/service.asmx? WSDL
вы можете получить IP-адрес aaa.com с помощью ping
а затем добавить в файл hosts
Включить все это из файла конфигурации php.ini
extension=php_openssl.dll extension=php_curl.dll extension=php_xmlrpc.dll
Аналогичная ошибка. Понял, что у меня была настройка .htpasswd для конкретного хоста. Скомпилировал его из файла .htaccess и отлично работал.
Я получил ту же ошибку
Не удалось подключиться к API Magento WebService: SOAP-ERROR: Разбор WSDL: Не удалось загрузить из 'example.com/api/soap/?wsdl': не удалось загрузить внешнюю сущность "example.com/api/soap/?wsdl "
и моя проблема была решена после того, как я обновил URL-адрес Magento Root до
example.com/index.php/api/soap/?wsdl
Да, мне не хватало index.php, который вызывает ошибку.
Как упоминалось в предыдущих ответах, эта ошибка может возникать при взаимодействии с SOAP-службой по HTTPS-соединению, и проблема связана с соединением. Проблема может быть на удаленной стороне (недействительный сертификат) или на клиенте (в случае отсутствия файлов 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);