PHP 用 SoapClient 访问 远程https wsdl接口。

新手上路,请多包涵

PHP 用 SoapClient 访问 远程wsdl 接口
http 可以成功
https 调不通

报错
SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://...:/xx/xx/xx?wsdl' : failed to load external entity "https://...:/xx/xx/xx?wsdl"

好像证书的原因, 但是 加上证书 、绕过证书的方法都不行

有没有朋友熟悉 SoapClient 实例化是的 第二参数选项的 环境 linux、php7

求助,网上帖子都翻烂了...

阅读 4.2k
3 个回答

你先试直接用curl访问这个https地址, 看看报错信息.

$ch = curl_init('https://...:/xx/xx/xx?wsdl');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_VERBOSE => 1,
    CURLOPT_CERTINFO => 1,
]);

curl_exec($ch);

看看是不是openssl.cafile(php.ini中)设置有问题.
如果是这个问题, 到https://curl.haxx.se/docs/cae... 这儿下载文件,
设置curl_setopt(CURLOPT_CAINFO, '下载的.pem文件')
或者直接设置openssl.cafile(php.ini中)

另外, 极有可能你的字段没写对, 是http, 不是https

libxml_disable_entity_loader(false);
$opts = array(
    'ssl'   => array(
            'verify_peer'          => false
        ),
    'https' => array(
            'curl_verify_ssl_peer'  => false,
            'curl_verify_ssl_host'  => false
     )
);
$streamContext = stream_context_create($opts);
$client = new SoapClient("https://urlToSoapWs",
  array(
      'stream_context'    => $streamContext
  ));

这个试过了 不行...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题