Я работаю над установкой обработки кредитной карты и должен был использовать обходное решение для ЗАВИХРЕНИЯ. Следующий код хорошо работал, когда я использовал тестовый сервер (который не называл URL SSL), но теперь когда я тестирую его на рабочем сервере с HTTPS, он перестал работать с сообщением об ошибке, "не удался открыть поток".
function send($packet, $url) {
$ctx = stream_context_create(
array(
'http'=>array(
'header'=>"Content-type: application/x-www-form-urlencoded",
'method'=>'POST',
'content'=>$packet
)
)
);
return file_get_contents($url, 0, $ctx);
}
Попробуйте следующий скрипт, чтобы проверить, есть ли https-обертка, доступная для ваших php-скриптов.
$w = stream_get_wrappers();
echo 'openssl: ', extension_loaded ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "\n";
echo 'wrappers: ', var_export($w);
вывод должен быть что-то вроде
openssl: yes
http wrapper: yes
https wrapper: yes
wrappers: array(11) {
[...]
}
Вероятно, это связано с тем, что ваш целевой сервер не имеет действующего SSL-сертификата.
HTTPS поддерживается начиная с PHP 4.3.0, если вы скомпилированы с поддержкой OpenSSL.
Также, убедитесь, что целевой сервер имеет действующий сертификат, брандмауэр разрешает исходящие соединения и allow_url_fopen
в php.ini установлено значение true.
Иногда сервер принимает решение не отвечать, основываясь на том, что он видит или не видит в заголовках http запроса (например, соответствующий пользовательский агент). Если вы можете соединиться с браузером, возьмите заголовки, которые он посылает, и имитируйте их в контексте вашего потока.
.