Я могу подключиться с помощью Apple News API, но я не могу отправить данные в формате JSON.
Мой код ниже.
но когда я пытаюсь прикрепить файл JSON. Я получаю сообщение об ошибке подписи.
<?php
$channel_id = 'xxxxxxxxxxxxxxxxxx';
$api_key_id = 'xxxxxxxxxxxxxxx';
$api_key_secret = 'xxxxxxxxxxxxxxxx';
// use the correct values above
$data = file_get_contents('article.json');
$Content_type="application/json";
$url = 'https://news-api.apple.com/channels/'.$channel_id;
$date = gmdate('Y-m-d\TH:i:s\Z');
$canonical_request = 'GET'.$url.$date.$Content_type;
$key = base64_decode($api_key_secret);
$hashed = hash_hmac('sha256', $canonical_request,$key,true);
$signature = base64_encode($hashed);
echo $signature;
//curl options
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$headers = array();
$headers[] = "Authorization: HHMAC; key={$api_key_id}; signature={$signature}; date={$date}";
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//curl_setopt($ch, CURLOPT_POST, true);
//curl_setopt( $ch, CURLOPT_POSTFIELDS, $data);
//get result
$server_output = curl_exec ($ch);
curl_close ($ch);
print_r(json_decode($server_output));
?>
Так как вы отправляете GET
В запросе вы неправильно указали тип контента при построении канонического запроса.
Это должно работать для вас, тогда:
$canonical_request = 'GET'.$url.$date;
Для справки см. Справочник по Apple News API: настройка аутентификации MAC / HMAC:
Создайте каноническую версию запроса в виде побайтной конкатенации следующего:
- Метод HTTP (например, GET или POST, во всех заглавных буквах)
- Полный URL запроса
- Текущая дата в формате ISO 8601
Если запрос является запросом POST и включает в себя объект, включите следующее:
- Значение заголовка Content-Type
- Полное содержание объекта
Других решений пока нет …