簡體   English   中英

php soapclient wsdl SOAP-ERROR:解析 WSDL:無法加載

[英]php soapclient wsdl SOAP-ERROR: Parsing WSDL: Couldn't load from

我已經在 stackoverflow 中搜索並查看了此處,但我還沒有找到解決我的具體問題的方法。 我不斷收到錯誤

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

我正在嘗試使用帶有類似 URL 的 SOAP API

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。

另外,我嘗試通過在線 WSDL http://wsdlbrowser.com向 API 使用(發送請求)它可以工作,但是在使用 PHP 的代碼上它失敗了

供應商經常會忽略他們的 SSL 證書,因此站點和服務最終會擁有無效的證書 - 我懷疑這里就是這種情況。

禁用Kaii 此處描述的證書驗證,或者更好地讓您的提供商修復他們的證書。

您的代碼可以/應該是這樣的:

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

錯誤消息似乎表明您的應用程序無法讀取我們的 WSDL。 嘗試從運行您的應用程序的同一台機器上打開瀏覽器,看看您是否可以訪問https://sampleurl.com/MerchantQueryService.asmx?WSDL 上的 WSDL 地址。

如果沒有 - 您有網絡/防火牆/防病毒問題。 (如果)

如果您可以從瀏覽器訪問此地址 - 您的應用程序是否仍然遇到此問題? 然后檢查任何可能阻礙防火牆的應用程序。(反病毒是最可能的原因)

如果您使用 docker,由於 OpenSSL 默認安全級別,您可能會收到錯誤消息。 即使您在 SoapClient 選項中禁用驗證並允許自簽名。

嘗試將/etc/ssl/openssl.cnf seclevel 從DEFAULT@SECLEVEL=2

DEFAULT@SECLEVEL=1

或者只是添加到 Dockerfile

RUN sed -i "s|DEFAULT@SECLEVEL=2|DEFAULT@SECLEVEL=1|g" /etc/ssl/openssl.cnf

作者: https : //github.com/dotnet/runtime/issues/30667#issuecomment-566482876


您可以通過在容器上運行來驗證它

curl -A 'cURL User Agent' -4 https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/Auth?wsdl
  • 可以使用以下命令執行更好的診斷: libxml_get_last_error();
  • 可能緩存了錯誤的響應,在初始化對象時設置 'cache_wsdl' => WSDL_CACHE_NONE
  • 如果你跳過緩存,並在你的 libxml 錯誤中得到這個:

    LibXMLError 對象([level] => 1 [code] => 1549 [column] => 0 [message] => 無法加載外部實體“URL”[file] => [line] => 0)

沒有關於 Ubuntu 的描述,那么它不會拉文件周期。 您剛剛獲得了 Ubuntu 更新。 向他們揮手布朗克斯致敬並重新啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM