SOAP-ERROR: анализ WSDL: не удалось загрузить из <URL>

В 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();
}
?>

Пожалуйста, скажи мне, где я делаю ошибку я новичок в WSDL и мыле

Ответы

Ответ 1

Я решил это на своей настройке WAMP, включив расширение php_openssl, поскольку URL-адрес, который я загружал из используемого https://.

Ответ 2

У меня была эта проблема, и мне потребовались часы, чтобы понять. Главной причиной этой ошибки является то, что SoapClient не может передать файл веб-службы с хоста. Я раскомментировал эту строку "extension = php_openssl.dll" в файле php.ini и работает.

Ответ 3

У меня было точно такое же сообщение об ошибке. В моем случае внесение записи в мой файл /etc/hosts (на сервере, на котором размещена служба) для целевого сервера, на который ссылается WSDL, зафиксировал его.

Вид странного текстового сообщения об ошибке.

Ответ 4

Попробуйте следующее:

$Wsdl = 'http://xxxx.xxx.xx/webservice3.asmx?WSDL';
libxml_disable_entity_loader(false); //adding this worked for me
$Client = new SoapClient($Wsdl);
//Code...

Ответ 5

Если вы хотите использовать это на localhost, используйте WAMP.

Затем щелкните значок в трее > Услуги PHP > и включите следующее:

  • SOAP
  • php_openssl
  • OpenSSL
  • завиток

p.s. некоторые бесплатные веб-хостинга могут не иметь этих параметров

Ответ 6

Попробуйте добавить этот фрагмент кода. Это сработало для меня.

$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;
}

Ответ 7

У меня была такая же ошибка, и я решил, что ищет параметры мыла в файле php.ini и меняет soap.wsdl_cache_enabled = 1 на soap.wsdl_cache_enabled = 0

Ответ 8

добавить запись dns в файл системных хостов
например: http://aaa.com/service.asmx? WSDL
вы можете получить IP-адрес aaa.com с помощью ping а затем добавить в файл hosts

Ответ 9

Включить все из файла конфигурации php.ini

extension=php_openssl.dll
extension=php_curl.dll
extension=php_xmlrpc.dll

Ответ 10

Аналогичная ошибка. Понял, что у меня была настройка .htpasswd для конкретного хоста. Скомпилировал его из файла .htaccess и работал нормально.

Ответ 11

Я получил ту же ошибку

Не удалось подключиться к API Magento WebService: SOAP-ERROR: анализ WSDL: Не удалось загрузить из примера example.com/api/soap/?wsdl: не удалось загрузить внешний объект "example.com/api/soap/?wsdl"

и моя проблема была решена после обновления моего корневого URL Magento до

example.com/index.php/api/soap/?wsdl

Да, мне не хватало index.php, который вызывает ошибку.

Ответ 12

Как упоминалось в более ранних ответах, эта ошибка может возникать при взаимодействии с 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);

Ответ 13

Вы можете использовать эту опцию для вызова мыла с помощью wdsl:

$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);