2014-02-11 2 views
1

У меня проблема с запущенными методами с SOAP. Я использую Apache и PHP.PHP Мыльный вызов через https

это 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.

Это не так ли? Или я пропустил что-то еще?

ответ

0

Решение было гораздо проще, так как я thoguht будет:

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, которая вместо URL https имеет http.

+0

Хотя это «работает», вы абсолютно ** НЕ хотите делать это так. Зачем? Поскольку 'https: //' wrapper отключает проверку сертификатов однорангового сервера по умолчанию до PHP 5.6. Исключив контекст ssl, который вы в основном сказали, * «Мне все равно, кто на другом конце этой передачи, я им доверяю полностью». * Если вы имеете дело с данными, вы не хотите, чтобы я был способный читать или изменять это, не является правильным решением. – rdlowrey

2

Это ошибка библиотеки openssl.

При первой попытке отключить проверку SSL, добавив этот Params

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

И следующая попытка не использовать ? WSDL в ссылке месте, попробуйте использовать что-то вроде .wsdl

+1

Может подтвердить, что это работает в моем случае, когда тот же скрипт отлично работает в 5.4 и 5.5, мне просто нужно добавить '' verify_peer_name '=> false' в дополнение к 'verify_peer' для 5.6 для работы. –

Смежные вопросы