16

在 PHP 中:我收到一个错误:

SOAP 错误:解析 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'             => '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 和肥皂的新手

4

13 回答 13

29

我通过启用php_openssl扩展在我的 WAMP 设置中解决了这个问题,因为我从使用的 URL 加载https://

于 2013-02-08T14:48:40.070 回答
6

我有完全相同的错误信息。就我而言,在我的/etc/hosts文件中(在托管服务的服务器上)为 WSDL 中引用的目标服务器创建一个条目修复了它。

一种措辞奇怪的错误消息..

于 2012-09-07T20:15:54.220 回答
6

我遇到了这个问题,我花了几个小时才弄清楚。此错误的主要原因是 SoapClient 无法从主机流式传输 Web 服务文件。我在我的 php.ini 文件中取消了“extension=php_openssl.dll”这一行的注释,它可以工作。

于 2013-08-16T20:05:53.127 回答
5

尝试这个:

$Wsdl = 'http://xxxx.xxx.xx/webservice3.asmx?WSDL';
libxml_disable_entity_loader(false); //adding this worked for me
$Client = new SoapClient($Wsdl);
//Code...
于 2016-09-06T07:34:42.170 回答
4

如果您想在 localhost 上使用它,请使用 WAMP。

然后点击托盘图标>PHP 服务> 并启用以下功能:

  • 肥皂
  • php_openssl
  • openssl
  • 卷曲

ps 一些免费的虚拟主机可能没有这些选项

于 2013-03-26T08:32:58.287 回答
2

尝试添加这段代码。它对我有用。

$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;
}
于 2015-12-21T19:06:38.003 回答
2

我遇到了同样的错误,我在 php.ini 文件中查找soap设置并将soap.wsdl_cache_enabled = 1更改为soap.wsdl_cache_enabled = 0解决了它

于 2016-08-25T02:22:10.080 回答
1

将 dns 条目添加到您的系统主机文件
例如:http://aaa.com/service.asmx?WSDL
您可以通过 ping 获取 aaa.com 的 IP 地址,
然后添加到主机文件

于 2012-12-12T08:59:21.767 回答
1

从php.ini配置文件中启用所有这些

extension=php_openssl.dll
extension=php_curl.dll
extension=php_xmlrpc.dll
于 2014-12-17T14:12:08.963 回答
1

您可以将此选项用于使用 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);
于 2019-08-28T10:12:13.440 回答
0

类似的错误也是如此。意识到我为特定主机设置了 .htpasswd。从 .htaccess 文件中取消注释它并且工作正常。

于 2014-07-24T20:06:28.917 回答
0

我得到了同样的错误

无法连接到 Magento WebService API:SOAP-ERROR:解析 WSDL:无法从“example.com/api/soap/?wsdl”加载:无法加载外部实体“example.com/api/soap/?wsdl "

一旦我将 Magento Root URL 更新为

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

是的,我缺少导致错误的 index.php。

于 2016-06-16T07:47:39.053 回答
0

正如前面的回复中提到的,当通过 HTTPS 连接与 SOAP 服务交互时,可能会发生此错误,并且连接存在问题。问题可能出在远程端(无效证书)或客户端(如果丢失 CA 或 PEM 文件)。有关所有可能的 SSL 上下文设置,请参阅http://php.net/manual/en/context.ssl.php。就我而言,设置本地证书的路径解决了这个问题:

$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);
于 2016-12-02T16:49:01.987 回答