リソースのアクセス
続いて,
- https://
apis. live. net/ v5. 0/REST_ PATH ?access_token=ACCESS_ TOKEN
REST_
ここまでの内容をコードで書いてみましょう。認可コードを受け取った場合,
<?php
define('CLIENT_ID', 'xxxxx');
define('CLIENT_SECRET', 'xxxxx');
define('REDIRECT_URI', 'http%3A%2F%2Fexample.jp%2F');
if (isset($_GET['code'])) {
$msg = createMessage($_GET['code']);
}
if (!$msg) {
$signInUri = 'https://oauth.live.com/authorize' .
'?client_id=' . CLIENT_ID .
'&scope=wl.signin&20wl.offline_access' .
'&response_type=code' .
'&display=popup' .
'&locale=ja' .
'&redirect_uri=' . REDIRECT_URI;
}
function createMessage($code) {
$tokens = getTokens($code);
if (!$tokens) {
return "Error";
} else if (array_key_exists('error', $tokens)) {
return $tokens['error']['error_description'];
}
$res = callRestApi($tokens['access_token']);
if ($res === false) {
return "Error";
} else if (array_key_exists('error', $res)) {
return $res['error']['message'];
} else {
return 'こんにちは ' . $res['name'] . ' さん';
}
}
// 認可コードからアクセストークン取得
function getTokens($code) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
'https://oauth.live.com/token' .
'?client_id=' . CLIENT_ID .
'&redirect_uri=' . REDIRECT_URI .
'&client_secret=' . CLIENT_SECRET .
'&code=' . $code .
'&grant_type=authorization_code');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// (サーバー証明書を検証しない)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// エラーの場合 false を返す
$res = curl_exec($ch);
if ($no = curl_errno($ch)) {
return false;
}
curl_close($ch);
return json_decode($res, true);
}
// REST API の呼び出し (path が me 固定,GET メソッドのみ 対応)
function callRestApi($token, $path) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
'https://apis.live.net/v5.0/' .
'me' . // path
'?access_token=' . $token);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPGET, true);
// (サーバー証明書を検証しない)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// エラーの場合 false を返す
$res = curl_exec($ch);
if ($no = curl_errno($ch)) {
return false;
}
curl_close($ch);
return json_decode($res, true);
}
?>
上記コードは,
リフレッシュトークンによる更新
リフレッシュトークンを使ったアクセストークンの更新方法についてもふれておきます。アクセストークンを更新するには次のURLにアクセスします。
- https://
oauth. live. com/ token?client_ id=CLIENT_ ID &redirect_uri=REDIRECT_ URI &client_secret=CLIENT_ SECRET &refresh_token=REFRESH_ TOKEN &grant_type=refresh_ token
認可コードからアクセストークンを取得するときと比べ,
リフレッシュトークンを使用してアクセストークンを得るアプリの場合,
おわりに
今回はここまでです。いかがでしたでしょうか。PHPを使った簡単なWebサーバー上で動作するアプリを紹介しました。サーバー側で処理すると,