PHP7 cURL和SOAP请求SSL失败

时间:2018-03-06 20:50:36

标签: php web-services ssl curl soap

我在使用ubuntu 16.04

的流浪汉虚拟机中使用PHP 7.0.25

我需要向此SOAP API发出请求:  https://ws.ocasa.com/testecommerce/service.asmx?wsdl

php curl和SoapClient都失败了

使用SoapClient我正在这样做(也尝试过根本没有选项,只有cache_wsdl部分):

$options = array(
    'cache_wsdl' => 0,
    'trace' => 1,
    'stream_context' => stream_context_create(array(
          'ssl' => array(
               'verify_peer' => false,
                'verify_peer_name' => false,
                'allow_self_signed' => true
          )
    ))
);

$wsdl = 'https://ws.ocasa.com/testecommerce/service.asmx?wsdl';
$client = new \SoapClient( $wsdl, $options);

给我这个错误:

  

[的SOAPFault]
  SOAP-ERROR:解析WSDL:无法加载   'https://ws.ocasa.com/testecommerce/service.asmx?wsdl':未能成功   加载外部实体“https:
  //ws.ocasa.com/testecommerce/service.asmx?wsdl“

使用php curl我很想得到这个错误:

  

与ws.ocasa.com:443

相关的未知SSL协议错误

我无法从linux curl命令行获取页面而没有问题(当然,来自VM内部)

curl -I https://ws.ocasa.com/testecommerce/service.asmx?wsdl -v

SSL连接正在使用TLS1.0 / RSA_3DES_EDE_CBC_SHA1

我测试了添加

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

并尝试添加CA证书:(也尝试在php.ini中添加它们)

curl_setopt($ch, CURLOPT_CAINFO, '/vagrant/cacert.pem');

有点奇怪的是,我可以卷起其他一些https网站而不会出现像secure.php.net usgin php curl这样的问题。

此外,没有“http”版本可用于摆脱整个SSL问题。

有什么想法吗?我可能错过了一些依赖吗? openssl已安装。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

好吧,我找到了一个解决方案......

使用curl( CURLOPT_SSLVERSION 会产生差异)

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $wsdl);
curl_setopt($ch, CURLOPT_POSTFIELDS,  $xml); // $xml is the envelope (string)
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);

即使使用SOAP_SSL_METHOD_TLS选项,我也无法使SoapClient正常工作。 我将其标记为已解决,但如果有人发现如何使其与SoapClient一起使用,那将是真正的答案。

This帮助我完成了请求(不是ssl部分)