アプリケーションの作成の次のステップ
ここでは「アプリケーションを作成する」で取得したClient ID/Secretを用いて、アクセストークンを取得する手順を紹介します。
freeeではOauth2.0を採用しており、Authorization Code Grantを推奨しています。アクセストークン取得は以下の手順にて行います。
- 認可コードを取得する
- アクセストークンを取得する
- リフレッシュトークンを用いてアクセストークンを取得する(2回目以降)
- (アプリを公開する場合のみ) ユーザーのアプリ利用手順を理解する
認可コードを取得する
-
- 認可用URLをfreeeアプリストアのアプリ管理画面で確認します。
Top > アプリ管理 > アプリ詳細 「基本設定」タブ
- 認可用URLをfreeeアプリストアのアプリ管理画面で確認します。
3.認可コードを取得する
-
- コールバックURLをローカル環境 `urn:ietf:wg:oauth:2.0:oob` に設定し、認可用URLにアクセスします。
- 「許可する」をクリックします。
- 認可コードが表示されます。
4.アクセストークンを取得する
-
- Access Token URLにリクエストを送信する。
これまでに取得したClient ID、Secret、認可コード、encodedコールバックURLの4点から、アクセストークンを取得します。curl -i -X POST \ -H "Content-Type:application/x-www-form-urlencoded" \ -d "grant_type=authorization_code" \ -d "client_id=あなたのClient ID" \ -d "client_secret=あなたのClient Secret" \ -d "code=取得した認可コード" \ -d "redirect_uri=あなたのencodedコールバックURL" \ 'https://accounts.secure.freee.co.jp/public_api/token'
- リクエストレスポンスからアクセストークンを取得する
- リクエストが成功すると以下のようなレスポンスが戻ります。レスポンスの中からアクセストークン、リフレッシュトークンを取得します。
- 取得できたアクセストークンの有効期限は24時間です。
- Access Token URLにリクエストを送信する。
{
"access_token": "アクセストークンの文字列",
"token_type": "bearer",
"expires_in": 86400,
"refresh_token": "リフレッシュトークンの文字列",
"scope": "read write"
}
リフレッシュトークンを用いてアクセストークンを取得する
初回は認可コードからアクセストークンを取得しましたが、2回目以降は認可コードの代わりに(2)で取得したリフレッシュトークンを用いてアクセストークンを取得します。リフレッシュトークンには有効期限はありません。
curl -i -X POST \
-H "Content-Type:application/x-www-form-urlencoded" \
-d "grant_type=refresh_token" \
-d "client_id=あなたのClient ID" \
-d "client_secret=あなたのClient Secret" \
-d "refresh_token=取得したrefresh_token" \
-d "redirect_uri=あなたのencodedコールバックURL" \
'https://accounts.secure.freee.co.jp/public_api/token'
サンプルコード
Java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
//変数を書き換えて利用します。
String client_id = { あなたのclient_id }
String client_secret ={ あなたのClient Secret };
String redirect_uri = { あなたのencodedコールバックURL }
String code = { 取得した認可コード }
String token_url = "https://accounts.secure.freee.co.jp/public_api/token";
String access_token;
String refresh_token;
//アクセストークンを取得する。
HttpResponse response = Unirest.post(token_url)
.header("Content-Type", "application/json")
.field("grant_type", authorization_code)
.field("redirect_uri", redirect_uri)
.field("client_id", client_id)
.field("client_secret", client_secret)
.field("code", code)
.asJson();
if (response.getStatus() != 200) {
throw new HttpException(response.getStatusText());
}
//リクエストレスポンスからアクセストークンを取得する。
response = response.getBody();
JSONArray jsonArray = response.getArray();
JSONObject jsonObject = jsonArray.getJSONObject();
access_token = jsonObject.getString("access_token");
refresh_token = jsonObject.getString("refresh_token");
//リフレッシュトークンを用いてアクセストークンを取得する。
HttpResponse response = Unirest.post(token_url)
.header("Content-Type", "application/x-www-form-urlencoded")
.body("grant_type=" + refresh_token + "&
redirect_uri=" + redirect_uri + "&
client_id=" + client_id + "&
client_secret=" + client_secret + "&
refresh_token=" + refresh_token)
.asJson();
Node.js
var request = require("request");
//変数を書き換えて利用します。
var token_url = "https://accounts.secure.freee.co.jp/public_api/token";
var redirect_uri = "あなたのencoedコールバックURL";
var client_id = "あなたのClient ID";
var client_secret = "あなたのClient Secret";
var code = "取得した認可コード";
var access_token = null;
var refresh_token = null;
//アクセストークンを取得する。
var options = {
method: 'POST',
url: token_url,
headers: {
'cache-control': 'no-cache',
'Content-Type': 'application/json'
},
form: {
grant_type: "authorization_code",
redirect_uri: redirect_uri,
client_id: client_id,
client_secret: client_secret,
code: code
},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
//リクエストレスポンスからアクセストークンを取得する。
var response = body;
access_token = response.access_token;
refresh_token = response.refresh_token;
});
//リフレッシュトークンを用いてアクセストークンを取得する。
var options = {
method: 'POST',
url: token_url,
headers: {
'cache-control': 'no-cache',
'Content-Type': 'application/x-www-form-urlencoded'
},
form: {
grant_type: "refresh_token",
redirect_uri: redirect_uri,
client_id: client_id,
client_secret: client_secret,
refresh_token: refresh_token
},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
//リクエストレスポンスからアクセストークンを取得する。
var response = body;
access_token = response.access_token;
refresh_token = response.refresh_token;
});
以上でアクセストークンの取得は完了です。
アプリストアへ公開する場合は「実装ガイドライン」「セキュリティガイドライン」を参照して下さい。
続いて、アクセストークンを用いてAPIのGET/POSTリクエストを行いましょう。