2015-11-28 3 views
1

У меня есть googled и посмотрел здесь в stackoverflow, но я не нашел решение моей конкретной проблемы. Я получаю ошибкуphp soapclient wsdl SOAP-ERROR: Разбор WSDL: Не удалось загрузить с

SOAP-ERROR: Parsing WSDL: Couldnt load from "https://sampleurl.com/MerchantQueryService.asmx?WSDL" : failed to load external entity "https://sampleurl.com/MerchantQueryService.asmx?WSDL" 

Я пытаюсь использовать SOAP API с URL, как

https://sampleurl.com/MerchantQueryService.asmx?WSDL 

Я бегу MAMP на моем локальном хосте и с помощью GoDaddy хостинга, я примерил как с файл WSDL можно найти здесь

http://clemdemo.com/test.wsdl 

В PHP я использую ниже код

error_reporting(-1); 
ini_set('display_errors', 'On'); 
ini_set('soap.wsdl_cache_enabled', 0); 

echo "<pre>"; 

try { 

$url  = "https://sampleurl.com/MerchantQueryService.asmx?WSDL "; 
$headers = [ 
    'Host: sampleurl.com', 
    'Connection: Keep-Alive', 
    'User-Agent: PHP-SOAP/5.3.29', 
    'Content-Type: text/xml; charset=utf-8', 
    'SOAPAction: "RequestTransaction"', 
    'Content-Length: 409']; 

$rq = [ 
"userName" => "username_here", 
"passWord" => "password_here", 
"referenceId" => "3455566694", 
"msisdn" => "346774313"]; 


try { 

$cient = new SoapClient($url, 
    [ 
    'soap_version' => SOAP_1_2, 
    'exceptions' => 1, 
    'cache_wsdl' => WSDL_CACHE_NONE, 
    'trace' => 1, 
    'stream_context' => stream_context_create(array('http' => array('header' => $headers))) 
]); 

print_r($cient); 
} catch (SoapFault $e) { 
    echo "\nFault Code: ".$e->faultcode; 
    echo "\nFault String: ".$e->faultstring; 
} 

На моем локальном хосте MAMP у меня есть SOAP, openssl и curl.

Кроме того, я попытался с помощью (отправка запроса) к API с онлайн WSDL http://wsdlbrowser.com он работает, но на коде с использованием PHP он не

ответ

7

Часто бывает, что поставщики пренебрегают свои SSL сертификаты, а чем сайты и услуги конечной имея недопустимые сертификаты - я подозреваю, что это имеет место здесь.

Отключение проверки сертификата, как описано by Kaii here, или даже лучше, чтобы ваш провайдер установил свой сертификат.

Ваш код может/должен затем быть что-то вроде: появляется

сообщения
$url  = "https://sampleurl.com/MerchantQueryService.asmx?WSDL "; 
$context = stream_context_create(array(
     'ssl' => array(
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'allow_self_signed' => true 
     ) 
)); 

$rq = ["userName" => "username_here", 
     "passWord" => "password_here", 
     "referenceId" => "3455566694", 
     "msisdn" => "346774313"]; 

$service = new SoapClient($url, array('stream_context' => $context)); 
$service->RequestTransaction($rq); 
0

ошибки сказать, что ваше приложение не может прочитать наш WSDL. Попробуйте открыть браузер с того же компьютера, на котором работает ваше приложение, и посмотрите, можете ли вы получить доступ к адресу WSDL по адресу https://sampleurl.com/MerchantQueryService.asmx?WSDL.

Если нет - у вас есть проблема с сетью/брандмауэром/Антивирусом. (в случае)

Если у вас есть доступ к этому адресу из браузера - ваше приложение все еще испытывает эту проблему? затем проверьте любое приложение, которое может помешать вашему брандмауэру. (Антивирус является наиболее вероятной причиной)

0
  • Лучшая диагностика может быть выполнена с помощью: libxml_get_last_error();
  • Мог бы кэшировать плохой ответ, набор «cache_wsdl» => WSDL_CACHE_NONE когда initating объекта
  • если пропустить кэш, и получить это в вашей ошибке Libxml:

    LibXMLError Объект ( [уровень] => 1 [код] => 1549 [столбец] => 0 [сообщение] => не удалось загрузить внешний объект "URL" [файл] => [строка] => 0 )

Без описания на Ubuntu, тогда его не тянет период файла. Вы просто получили обновление Ubuntu. Волнуйте им салют и перезагрузите бронкс.

Смежные вопросы