@alabs

Curl выдает false. Что делать?

Есть вот такая функция работы со сбербанком. Выдает bool(false) . Самое странное, что на другом серваке работает нормально. Думал затык в https, но запросы со своих серваков по http и https забирает. В какую сторону можно покапать?
define('GATEWAY_URL', 'https://3dsec.sberbank.ru/payment/rest/');

function gateway($method, $data) {
    $curl = curl_init(); // Инициализируем запрос
    curl_setopt_array($curl, array(
        CURLOPT_URL => GATEWAY_URL.$method, // Полный адрес метода
        CURLOPT_RETURNTRANSFER => true, // Возвращать ответ
        CURLOPT_POST => true, // Метод POST
		CURLOPT_POSTFIELDS => http_build_query($data) // Данные в запросе
    ));
    $response = curl_exec($curl); // Выполненяем запрос   
    var_dump($response);	
	$response = json_decode($response, true); // Декодируем из JSON в массив
    curl_close($curl); // Закрываем соединение
    return $response; // Возвращаем ответ
}
  • Вопрос задан
  • 6570 просмотров
Решения вопроса 1
@alabs Автор вопроса
Решил вопрос другим методом:
function gateway($method, $data) {
	$context = stream_context_create(array(
	  'http' => array(
		'method' => 'POST',
		'header' => 'Content-Type: application/x-www-form-urlencoded',
		'content' => http_build_query($data),
		'protocol_version' => 1.1,
		'timeout' => 10,
		'ignore_errors' => true
	  )
	));
	$response = file_get_contents(GATEWAY_URL.$method, false, $context);
	$response = json_decode($response, true); // Декодируем из JSON в массив
    return $response; // Возвращаем ответ
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Exploding
@Exploding
wtf?
Первый же сайт с Access-Control-Allow-Origin не * и все надежды, мечты, планы на счастливую и беззаботную жизнь - в миг рухнут как карточный домик.
А нужно было всего-то добавить:
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false

Ну или уж если прям совсем, то скачать и установить сертификат
Ответ написан
Stalker_RED
@Stalker_RED
Используя curl_error() можно узнать почему он возвращает false.

Чуток подробнее:
if($errno = curl_errno($ch)) {
    $error_message = curl_strerror($errno);
    echo "cURL error ({$errno}):\n {$error_message}";
}
Ответ написан
Комментировать
kirill_782
@kirill_782
Днем я Маринетт
Копать в сторону проверки SSL сертефиката.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы