[英]PHP SoapClient over selfsigned certificate, SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://
[英]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 错误中得到这个:
LibXMLError 对象([level] => 1 [code] => 1549 [column] => 0 [message] => 无法加载外部实体“URL”[file] => [line] => 0)
没有关于 Ubuntu 的描述,那么它不会拉文件周期。 您刚刚获得了 Ubuntu 更新。 向他们挥手布朗克斯致敬并重新启动。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.