PHP Soap通过https调用

时间:2014-02-11 09:44:02

标签: php apache soap ssl https

我在使用SOAP运行方法时遇到问题。我正在使用Apache和PHP。

这是PHP代码:

$opts = array(
    'ssl' => array('ciphers'=>'RC4-SHA')
);

ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);

$client = new SoapClient('https://host?wsdl', array (
'stream_context' => stream_context_create($opts),
"trace" => 1,
"exceptions" => 0,
"connection_timeout"=>2000));
var_dump($client->__getFunctions());

$params = array ("key" => "value");
$result = $client->availabeFunction($params);
var_dump($result);

__getFunctions()它会返回所有可用的函数。

然后当我试图用参数调用可用函数时。

它返回一个strage错误消息:

public 'faultstring' => string 'Could not connect to host' (length=25)
public 'faultcode' => string 'HTTP' (length=4)

所以我认为它是出于某些原因通过HTTP连接,而不是通过HTTPS连接。

我查了一下网页,在某些情况下,他们使用local_cert值和.pem文件。

拥有它是必要的吗?或者我错过了其他什么?

2 个答案:

答案 0 :(得分:2)

这是一个openssl库错误。

首先尝试通过添加此参数来禁用SSL检查

"stream_context" => stream_context_create(
    array(
        'ssl' => array(
            'verify_peer'       => false,
            'verify_peer_name'  => false,
        )
    )
)

接下来尝试不在位置链接中使用?wsdl ,尝试使用类似的内容 的的.wsdl

答案 1 :(得分:0)

我认为解决方案会更容易:

ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);

$location = 'https://host';

$client = new SoapClient($location . '?wsdl', array (
"trace" => 1,
"exceptions" => 0,
"connection_timeout"=>2000,
"location"=>$location // <- this was the reqiured parameter
));

其他一切都和以前一样。 这是由WSDL文件配置引起的,而不是https URL,它有http。