【发布时间】:2017-11-27 13:10:57
【问题描述】:
我有一个可以在 PHP 5.6 (RH6) 上正常工作的soapClient 调用。我们正在将系统升级到 PHP 7(RH7 与上一个配置相同),但相同的调用不起作用。
这是我的代码
$wsdlUrl = "https://THE_URL_I_AM_CALLING/repository/soap/2.1?wsdl";
$sslClientCert = "../../app/config/ssl/ssl_cert.crt";
$sslClientKey = "../../app/config/ssl/ssl_cert.key";
$proxy = 'proxy_http';
$port = 8080;
$contextOptions = [
'ssl' => [
'local_cert' => $sslClientCert,
'local_pk' => $sslClientKey,
'SNI_enabled' => true,
'SNI_server_name' => 'THE_URL_I_AM_CALLING'
]
];
$options= [
"soap_version" => SOAP_1_2,
"features" => SOAP_SINGLE_ELEMENT_ARRAYS,
"stream_context" => stream_context_create($contextOptions),
'proxy_host' => $proxy,
'proxy_port' => $port
];
$client = new SoapClient($wsdlUrl, $options);
try {
// execute the search
$searchResults = $client->searchDocuments([
"text" => "myText",
"hint" => "document"
]);
}
catch (Exception $e) {
echo $e->getMessage();
}
我在 PHP 7 下遇到的错误是
PHP 致命错误:未捕获的 SoapFault 异常:[HTTP] 无法连接到主机
如果我使用 CURL 进行调用,它会起作用。
我宁愿使用 clientSoap 让我的生活更轻松。
【问题讨论】:
-
检查你是否在
php7中启用了soap -
我查过了。它已启用
-
你说你在升级,你有没有比较5.6和7之间启用的扩展和设置?由于您无法连接到主机,这听起来像是与 SSL 相关的问题。验证
openssl扩展是否已启用。我还会尝试将相对 URI 更改为证书文件,以支持使用dirname(dirname(__DIR__)) . '/app/config/ssl/...'否则尝试将"ssl" => array('verify_peer' => false, 'verify_peer_name' => false)添加到您的contextOptions,以验证它不是证书问题。您可能需要在 php.ini 中定义curl.cainfo和openssl.cafile -
我无法连接到soapClient。但我可以连接 CURL(使用证书和密钥)。 openssl 在新服务器上启用,所有其他设置都相同。当我更新
contextOptions数组时,我得到Bad Request
标签: php soap-client php-7