Я пытаюсь вызвать API, который возвращает мне файл JSON:
Как вы заметите, есть окно аутентификации с запросом пользователя и пароля.
У меня есть токен (состоящий только из имени пользователя, без пароля, проверьте сценарий ниже), но мне не удается пройти эту аутентификацию.
Я пробовал это:
<?php
$host='https://api.sncf.com/v1/coverage/sncf/stop_areas/stop_area:OCE:SA:87391003/departures?datetime=20180323T085700';
$json_source=file_get_contents($host);
$username = "d96395d8-342d-4be4-8ed3-5909624abc57";
$password = "";
$additionalHeaders = "";
$payloadName = "";
$process = curl_init($host);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', $additionalHeaders));
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_POSTFIELDS, $payloadName);
$return = curl_exec($process);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
curl_close($process);
$data = json_decode($json_source);
var_dump($data);
foreach ($data->departures as $a) {
echo $a->display_informations->direction. '<br />';
}
?>
но это не работает, у меня все еще возникает эта ошибка:
Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in C:\wamp64\www\index.php on line 3
Итак, если я сделаю var_dump($data), я получу переменную Null.
В Интернете пример в основном касается указания сертификата для преодоления этой проблемы с SSL, но в моем случае это пользователь / пароль, который мне нужно предоставить, и я не смог заставить его работать, используя пример, который я нашел в Интернете, поэтому Я иду к тебе.
Итак, я должен установить сертификат на свой сервер или мне следует загрузить их сертификат, чтобы настроить завиток?
Либо один. Иногда (по опыту) глобальный сертификат не содержит того, что вам нужно, и вам приходится получать сертификат от хоста (или его провайдера). Как будто мне не повезло с сертификатами RapidSSL в прошлом году, и мне нужно было вытащить их напрямую, чтобы добавить, чтобы заставить работать некоторые API.






Ошибка, которую вы получаете, связана с SSL. Дело даже не в том, что вам нужно беспокоиться о user / pass auth. Итак, решайте одну проблему за раз :) Необходимо настроить cacert для использования curl. После того, как вы избавитесь от ошибки SSL failed, вы можете беспокоиться о user / pass auth (с чем гораздо проще справиться).