Как запросить OData API с помощью PHP с ключом API и секретом API? Получение ‘URL не задан!’ ошибка скручивания

Я новичок в API, и я пытаюсь создать приложение, которое будет извлекать некоторые данные из API OData, предоставляемого Cornerstone OnDemand LMS. Это называется Reporting API. В документации Cornerstone OnDemand говорится, что мне нужно получить ключ API и секрет API, а затем получить токен сеанса. Он объясняет процесс до генерации подписи сеанса API и предоставляет пример кода PHP с ним. Однако я не уверен, как выйти за рамки этого после генерации подписи.

Вот пример кода PHP, доступного в документации Cornerstone OnDemand.

//signature to acquire a session
$apiId = '<insert Api ID>';
$apiSecret = '<Insert API Secret>';

//build the string to sign
//note the order of the entries is important.
//The http headers must be in alphabetical order by key name
$httpMethod = 'POST';
$apiKey = 'x-csod-api-key:'.$apiId;
$httpUrl = '/services/api/sts/session';

date_default_timezone_set('UTC');
$date = 'x-csod-date:'.date('Y-m-d').'T'.date('H:i:s').'.000';
$stringToSign = $httpMethod."\n".$apiKey."\n".$date."\n".$httpUrl;

/* produces the following string:
*  POST\nx-csod-api-key:1lie8ficql9h5\nx-csod-date:2015-09-08T11:27:32.000\n/services/api/sts/session
*/

//Generate the signature
$secretKey = base64_decode($apiSecret);
$signature = base64_encode(hash_hmac('sha512', $stringToSign, $secretKey, true));

Я не уверен, что делать после генерации подписи. Пример кода C # API REST доступен в GitHub-репозитории Cornerstone OnDemand по адресу https://github.com/csodedge/csod-rest-api-sample-code-POST Однако я не могу найти ничего, что я мог бы использовать для PHP.

Я с нетерпением жду некоторой помощи от сообщества StackOverflow. Буду очень признателен за любую помощь.

РЕДАКТИРОВАТЬ 1:
После некоторых исследований я решил, что мне нужно сформировать заголовки и использовать Curl для отправки запроса. Я добавил код curl, однако теперь получаю ошибку неверного запроса. Вот обновленный код. Буду признателен за любую оказанную помощь.

//signature to acquire a session
$apiId = '<removed for safety>';
$apiSecret = '<removed for safety>';

//build the string to sign
//note the order of the entries is important.
//The http headers must be in alphabetical order by key name
$httpMethod = 'POST';
$apiKey = 'x-csod-api-key:'.$apiId;
$httpUrl = 'https://clientdomain.csod.com/services/api/sts/session?userName=clientuserid&alias=jk01';

date_default_timezone_set('UTC');
$date = 'x-csod-date:'.date('Y-m-d').'T'.date('H:i:s').'.000';
$stringToSign = $httpMethod."\n".$apiKey."\n".$date."\n".$httpUrl;

//Generate the signature
$secretKey = base64_decode($apiSecret);
$signature = base64_encode(hash_hmac('sha512', $stringToSign, $secretKey, true));

$crl = curl_init();

curl_setopt($crl, CURLOPT_URL, $httpUrl);
curl_setopt($crl, CURLOPT_HTTPHEADER, array (
'x-csod-api-key: '.$apiId,
'x-csod-date: '.date('Y-m-d').'T'.date('H:i:s').'.000',
'x-csod-signature: '.$signature
));
curl_setopt($crl, CURLOPT_POST,true);
$rest = curl_exec($crl);
if ($rest === false)
{
// throw new Exception('Curl error: ' . curl_error($crl));
print_r('Curl error: ' . curl_error($crl));
}

curl_close($crl);
print_r($rest);

Этот код теперь дает мне следующую ошибку:

Неверный запрос
Ваш браузер отправил запрос, который этот сервер не может понять.
Ссылка # 7.9dde387d.1532191458.b66f123 1

Пожалуйста помоги.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]