我在带有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。
谢谢你的时间。
好吧,我有点找到了解决方案...
带卷曲(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);
我无法使SoapClient工作,即使使用SOAP_SSL_METHOD_TLS选项。 我会将其标记为已解决,但如果有人找到如何使其与 SoapClient 一起工作,那将是真正的答案。
这有助于我提出请求(不是 ssl 部分)