SOAPClient错误:无法连接到PHP 7.0和Laravel上的主机

时间:2017-05-12 23:49:14

标签: php laravel soap wsdl laravel-5.1

我在使用PHP 7.0的服务器上的Laravel应用程序上通过SOAPClient连接到WSDL时遇到问题。我已经使用PHP 5.6在我的本地服务器上测试了以下代码,它可以工作。两者都在运行Linux;我的本地服务器正在运行Kubuntu而另一台服务器正在运行CentOS 7。

var $client;

function __construct(){
    ini_set('soap.wsdl_cache_enabled',WSDL_CACHE_NONE);
    ini_set('soap.wsdl_cache_ttl', 0);

    $this->client = new SoapClient(env('WSDL_SOLMAN02_TEST'),
        ['login'=>env('SOLMAN_US_TEST'),
         'password'=>env('SOLMAN_PSSWD_TEST'),
         'cache_wsdl' => WSDL_CACHE_NONE,
         'soap_version' => SOAP_1_1,
         'ssl_method' => 'SOAP_SSL_METHOD_SSLv3',
         'trace' => true,
         'exception' => false,
         'stream_context'=> stream_context_create(array(
            'ssl'=> array(
                    'verify_peer'=>false,
                    'verify_peer_name'=>false
                )
            ))
        ]
    );

}
public function updateTicket(Ticket $ticket){

    $incident = $this->createTicketObject($ticket);
    $params = get_object_vars($incident);

    return $this->client->wsdlFunc($params);
}

有趣的是,当我打印dd($this->client->__getFunctions());时,WSDL会响应你可以调用的所有函数的数组,但是当我实际调用任何函数时,会显示错误。

我已经尝试了几乎所有东西,从更改连接中的每个参数到更改php.ini,但没有任何工作。我已将服务器降级到PHP 5.6,但它仍然无法正常工作。

我还在SOAPUI上测试了WSDL,它可以工作。

我发现两种环境之间唯一的区别是PHP 7.0的服务器有https。

2 个答案:

答案 0 :(得分:2)

我的代码很好,我只需要将WSDL IP地址添加到/ etc / hosts。

答案 1 :(得分:2)

当我从php v7.2升级到v7.3(docker)时遇到了同样的问题: SOAPClient Error: Could not connect to host

我尝试了@suecamol提出的解决方案,但没有成功。看起来php v7.3通过ssl安全性进行了一些更改。

我的一位同事发现的解决方案是添加适当的ssl密码加密:

$arrContextOptions= [
        'ssl' => [
            'ciphers' => 'AES256-SHA',
        ]
    ];

$options = [
        ...

        'stream_context' => stream_context_create($arrContextOptions),
    ];


$client = new SoapClient('some wsdl url', $options);

希望这可以帮助面临此问题的人。