С API, к которому я пытаюсь подключиться, я должен отправить ssl-ключ с моими запросами.Я могу сделать это нормально в стандартном PHP.Когда я использую Laravel, я не могу заставить его работать правильно.
$cert = 'app/file_combo.pem';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSLCERT, $cert);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD , $pass);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$response = curl_exec($ch);
Ответ - ничто.Я предполагаю, что $ url, с которым я разговариваю, игнорирует меня.поэтому я добавил:
$info = curl_getinfo($ch);
echo "<pre>";
print_r($info);
Ответ:
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[redirect_url] =>
[primary_ip] => a.b.c.d
[certinfo] => Array
(
)
Информация о сертификате пуста ....
Итак, я добавил:
if(curl_errno($ch)){
echo 'Curl error: ' . curl_error($ch);
}
и я вижу:
Curl error: could not load PEM client certificate, LibreSSL error error:02FFF002:system library:func(4095):No such file or directory, (no key found, wrong pass phrase, or wrong file format?)
Я пробовал множество путей к файлам и, похоже, не могу понять это правильно.файл pem находится в каталоге приложения в laravel.
Итак, я попробовал Guzzle.
$options = [
'headers' => [
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Connection: Keep-Alive",
"Pragma: no-cache",
"Content-length: ".strlen($xml),
],
'body' => $xml,
'verify' => 'app/file_combo.pem'
];
и получил ответ:
"message": "SSL CA bundle not found: app/file_combo.pem",
Мне все равноесли я использую жрет или нет, я просто пытаюсь заставить его работать ... Опять же, в стандартном php запрос curl прекрасно работает.