Система оплаты видна на сайта при оформлении заказа, ее можно выбрать и оформить с ней заказ, но после на странице где есть переход на саму оплату и при попытки перейти к оплате ( /personal/order/payment/?ORDER_ID=50&PAYMENT_ID=50/1 ) - происходит ошибка Socket connection error (только эта строка и выходит, на этой странице просто вызов bitrix:sale.order.payment, он и вызывает эту ошибку)
сайт на https, при проверке в админке битрикса ошибок сокетов нету
я попробовал найти в коде эту ошибку, и обнаружил следующее если запустить такой код:
Код
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetTitle("test");
use \Bitrix\Main\Application,
\Bitrix\Main\Web\Uri,
\Bitrix\Main\Web\HttpClient;
function PRX($e) {
echo "<pre>".print_r($e,true)."</pre>";
}
// опции по умолчанию:
$options = array(
"redirect" => true, // true, если нужно выполнять редиректы
"redirectMax" => 5, // Максимальное количество редиректов
"waitResponse" => true, // true - ждать ответа, false - отключаться после запроса
"socketTimeout" => 30, // Таймаут соединения, сек
"streamTimeout" => 60, // Таймаут чтения ответа, сек, 0 - без таймаута
"version" => HttpClient::HTTP_1_0, // версия HTTP (HttpClient::HTTP_1_0 или HttpClient::HTTP_1_1)
"proxyHost" => "", // адрес
"proxyPort" => "", // порт
"proxyUser" => "", // имя
"proxyPassword" => "", // пароль
"compress" => false, // true - принимать gzip (Accept-Encoding: gzip)
"charset" => "", // Кодировка тела для POST и PUT
"disableSslVerification" => false, // true - отключить проверку ssl (с 15.5.9)
);
$httpClient = new HttpClient($options);
$params = array( 'a'=> 1 );
$url = 'https://winkyou.ru';
$postData = json_encode($params);
$response = $httpClient->post($url, $postData);
if ($response === false){
$errors = $httpClient->getError();
PRX( $errors );
} else {
PRX("OK");
}
$url = 'https://payment.yandex.net/api/v3/payments';
echo $url;
$postData = json_encode($params);
$response = $httpClient->post($url, $postData);
if ($response === false){
$errors = $httpClient->getError();
PRX( $errors );
}else {
PRX("OK");
}
$url = 'https://myeggershop.ru';
echo $url;
$postData = json_encode($params);
$response = $httpClient->post($url, $postData);
if ($response === false){
$errors = $httpClient->getError();
PRX( $errors );
}else {
PRX("OK");
}
( по сути такие же запросы и компонент кассы юзает ) то этот код выводит следующее:
т.е. проблема именно когда идет обращение к яндекс кассе, при этом такая же ошибка возникает, если обратиться например по несуществующему адресу например: https://asdfasdfa.ru
https://payment.yandex.net/api/v3/payments - этот адрес юзается яндекс кассой, однако выдает ошибку, поддержка яндекса пишет - что проблема не у них (наш домен не забанен), хостер тоже пишет, что де мол https в норме.
незнаю точно что это значит ( HTTP 401, Client error (Ошибка клиента) ) однако причем тут curl? в модуле юзается класс HttpClient, который юзает функции работы с сокетами
Вероятно, на сайте проблема с SSL сертификатом, для решения проблемы с данной ошибкой вам необходимо обратиться к вашему администратору сервера/хостинга.
Для проверки можно выполнить код в PHP-консоли $res = stream_socket_client('ssl://payment.yandex.net:443', $errno, $errstr, 30); if (!$res ) { echo "ОШИБКА: $errno - $errstr<br />\n"; }
Проверка выполняется функцией PHP stream_socket_client при подключении по протоколу SSL Если значение, возвращённое в аргументе errno равно 0 и функция возвратила значение FALSE, это означает, что ошибка произошла до вызова connect(). Это произошло скорее всего из-за проблемы инициализации сокета.
испробовал этот код, выдает ошибку 0, написал хостеру.
хостер ответил что с ssl у них все в порядке привел ссылку, на какой-то чекер ssl-ов. битрикс в ответ:
Цитата
Нужно добиться от хостинга чтобы после выполнения кода выше возвращался ресурс потока, согласно описанию метода https://www.php.net/manual/ru/function.stream-socket-client.php Это не ошибка нашего продукта Битрикс, а вопрос настройки сервера сайта Если хостинг не может выполнить требования, нужно его менять.