1

Apple News API に記事を POST するクエリを作成していますが、WRONG_SIGNATURE 応答が返されます。

Apple は、次のことを行うように指示しています。

  1. 次のバイト単位の連結として、リクエストの正規バージョンを作成します。

    HTTP メソッド (たとえば、すべて大文字の GET または POST)

    リクエストの完全な URL

    ISO 8601 形式の現在の日付

リクエストが POST リクエストで、エンティティが含まれている場合は、次を含めます。

Content-Type ヘッダーの値

エンティティの完全なコンテンツ

  1. API キーのシークレットを Base64 から raw バイトにデコードします。

  2. デコードされた API キー シークレットを使用して、正規のリクエストに対して HMAC SHA-256 を使用してハッシュを作成します。

  3. Base64 でハッシュをエンコードします。

  4. Authorization ヘッダーを次のように設定します。

    許可: HHMAC; キー=; 署名=; date= はステップ 1 の日付文字列です。

  5. リクエストを送信します。

WRONG_SIGNATURE の結果を返すコードは次のとおりです (API 資格情報が変更されました)。

//set the timezone
date_default_timezone_set('UTC');

//get json to be sent
$data = file_get_contents('http://www.broadwayworld.com/articleapple.cfm?colid=195', true);

//set variables
$http_method = 'POST';
$date = gmdate('Y-m-d\TH:i:s\Z');
$key = '62a75411-dd-4c3b-9d9-c7053760';
$url = 'https://news-api.apple.com/channels/485ae91a-2212-4276-9d07-82da7/articles';
$secret = base64_decode('9w9sElVs4UVGxMkGxCWOOWHJknKiNWa6tA=');

//cannonical request
$canonical_request = $url . $http_method  . $date;

//Signature
$api_signature = base64_encode(hash_hmac('sha256', $canonical_request, $secret));

//curl options
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$headers = array();
$headers[] = "Authorization: HHMAC; key={$key}; signature={$api_signature}; date={$date}";
$headers[] = 'Content-Type: multipart/form-data';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

//get result
$server_output = curl_exec ($ch);
curl_close ($ch);
print  $server_output ;
4

4 に答える 4

1

トム、あなたが変更する必要があることの 1 つは、 param を output rawhash_hmacに追加することです。trueこれは、Apple News に投稿する Wordpress プラグインをいくつか調べたときにわかりました。コードにこの変更を加えましたが、これは本質的にあなたのものと同じですが、まだ WRONG_SIGNATURE も取得しています。 $hash = hash_hmac('sha256', $canonical_request, $secret_key, true); だからまだ何か間違っている、私もそれを見つけることはできません。

于 2016-04-27T23:05:23.130 に答える