SOAP-ERROR:解析WSDL:无法从<url> </url>加载

时间:2012-06-18 12:28:25

标签: php soap https

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


?>

请告诉我我在哪里弄错了 我是WSDL和soap的新手

12 个答案:

答案 0 :(得分:28)

我在启用php_openssl扩展名时在我的WAMP设置中解决了这个问题,因为我使用的是从https://加载的网址。

答案 1 :(得分:6)

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

答案 2 :(得分:5)

我有完全相同的错误消息。在我的例子中,在我的/etc/hosts文件中(在托管服务的服务器上)为WSDL中引用的目标服务器创建了一个条目。

有点奇怪的错误信息..

答案 3 :(得分:5)

试试这个:

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

答案 4 :(得分:4)

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

然后点击托盘图标&gt; PHP服务&gt;并启用以下内容:

  • SOAP
  • php_openssl
  • OpenSSL的
  • 卷曲

P.S。一些免费的网络托管可能没有这些选项

答案 5 :(得分:2)

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

&#13;
&#13;
$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;
}
&#13;
&#13;
&#13;

答案 6 :(得分:2)

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

答案 7 :(得分:1)

将dns条目添加到系统主机文件中 例如:http://aaa.com/service.asmx?WSDL
你可以用ping获得aaa.com的ip地址 然后添加到hosts文件

答案 8 :(得分:1)

php.ini 配置文件

启用所有这些功能
extension=php_openssl.dll
extension=php_curl.dll
extension=php_xmlrpc.dll

答案 9 :(得分:0)

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

答案 10 :(得分:0)

我得到了同样的错误

  

无法连接到Magento WebService API:SOAP-ERROR:解析   WSDL:无法加载来自&example.com / api / touch /?wsdl&#39; :   无法加载外部实体&#34; example.com/api/soap/?wsdl&#34;

一旦我将Magento Root URL更新为

,我的问题就解决了
  

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

是的,我错过了导致错误的index.php。

答案 11 :(得分:0)

您可以将此选项用于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);