在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的新手
答案 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;并启用以下内容:
P.S。一些免费的网络托管可能没有这些选项
答案 5 :(得分: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;
}
&#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);