Apple新闻API。用于Connect和发送json数据的PHP代码

时间:2016-11-09 07:31:52

标签: php apple-news

我可以使用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));

?>

1 个答案:

答案 0 :(得分:1)

由于您要发送GET请求,因此在构建规范请求时,您错误地包含了内容类型。

这应该适合你,然后:

$canonical_request = 'GET'.$url.$date;

供参考,请参阅Apple News API Reference: Setting Up MAC/HMAC Authentication

  
      
  1. 创建请求的规范版本,作为以下字节顺序连接:

         
        
    • HTTP方法(例如,GET或POST,全部大写)
    •   
    • 请求的完整网址
    •   
    • ISO 8601格式的当前日期
    •   
  2.   
  3. 如果请求是POST请求且包含实体,请包含以下内容:

         
        
    • Content-Type标头的值
    •   
    • 实体的全部内容
    •   
  4.