freee APIのアクセストークンを取得する

Print Friendly and PDFページを印刷
対象プラン
  法人プラン   ✓ ライト   ✓ ビジネス      
  個人プラン   ✓  スターター   ✓  スタンダード   ✓  プレミアム  

【注意】本ページはソフトウェア開発者向けのページです

freee APIへのアプリケーションの登録、その後のアクセストークン取得までの流れをご紹介します(OAuth2に対応)。簡単な検証方法・サンプルコードも記載しています。

どのようなデータが送受信できるのかなど、最新のAPI仕様はこちらで公開しています。

 

目次

  1. freee APIへアプリケーションを登録する(未登録の場合)
  2. 連携アプリのアクセストークンを取得する
    1. アクセストークンの取得方法
    2. Chromeアドオンを用いた簡単な確認方法
    3. PHPでのサンプルコード

 

freee APIへアプリケーションを登録する(未登録の場合)

未登録である場合は、freee APIを利用するアプリケーションをfreeeに登録します。登録により、アプリケーションのIDとSecretが発行されます。

会計freeeにログインし、https://secure.freee.co.jp/oauth/applications にアクセスし、「+新しいアプリケーションを登録」をクリックします。
 

アプリケーション名、コールバックURIを入力し保存します。(入力内容は登録後にも編集できます)
※ ローカル環境でのテスト時には、コールバックURIに「urn:ietf:wg:oauth:2.0:oob」をご利用ください。

 

アプリケーションが登録され、IDとSecret、認証用URL(エンドユーザーが認証時にアクセスするURL)が表示されます。


※ 以後、アプリケーションの一覧から、登録したアプリケーション名をクリックすると、この画面を確認できます。

 

連携アプリのアクセストークンを取得する

アクセストークンの取得方法

アクセストークンを取得するためには、「Webアプリ認証用URL」(https://secure.freee.co.jp/oauth/authorize?client_id=${お客様のApp ID}&redirect_uri=${お客様のコールバックURI}&response_type=code)にて認証コード(Authorization code)を取得し、それを用いたhttpリクエストを送る必要があります。認証コードの有効期間は10分です。

※ 「Webアプリ認証用URL」へのアクセス時にログインする場合は、Googleアカウント等のsocial ログインではなく、freeeアカウントのメールアドレス・パスワードでログインする必要があります。


redirect_uriに「urn:ietf:wg:oauth:2.0:oob」を指定している場合、「Webアプリ認証用URL」へそのままブラウザでアクセスしても認証コード(Authorization code)を確認できます。

「許可する」をクリックすると、認証コードが表示されます。(有効期間:10分)

 

コンソール上からcurlコマンドを使ってアクセストークンを取得する例は下記のようになります。

curl -XPOST -d grant_type=authorization_code -d client_id=${お客様のApp ID} -d client_secret=${お客様のSecret} -d code=${先ほどのauthorization code} -d redirect_uri=${お客様のコールバックURI} "https://api.freee.co.jp/oauth/token"


成功すると、レスポンスとして アクセストークン、リフレッシュトークンが得られます。有効期限は、アクセストークンについては24時間、リフレッシュトークンでは無期限となっています。使用する際は必要に応じてrefresh、revokeしてください。

{
"access_token":
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"token_type": "bearer",
"expires_in": 86400,
"refresh_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"scope": "read write"
}


取得したaccess tokenを添えて利用したいAPIへアクセスすると利用できます。
例えば、Bearer Headerに添付してcurlコマンドを実行する例は下記のようになります
curl -H "Authorization: Bearer ${取得したaccess token}" "https://api.freee.co.jp/api/1/xxx.json"
※ アクセストークンを用いたGET・POST等のリクエスト送信の詳細については、こちらのページで取り扱います。

 

Chromeアドオンを用いた簡単な確認方法

コンソールからのコマンドライン操作をせずにhttpリクエストを送る簡単な方法として、Chromeアドオンを用いる方法があります。検証時に便利に活用できるためご紹介します。
DHC - Restlet Clientを導入し、REQUESTS画面から下記のように入力してsendします。 

項目 入力内容
エンドポイント api.freee.co.jp/oauth/token
Header 「Content-Type」、「application/x-www-form-urlencoded」
grant_type 「authorization_code」
client_id 取得したApp ID
client_secret 取得した Sacred
code 取得した 認証コード(Authorization code)
redirect_uri コールバックURI


※ 右上の「Code」をクリックするとコードを確認できます


成功すると、レスポンスが画面に表示されます。

※ このREQUESTSはDHC - Restlet Clientへ保存しておくこともできます。また、これと同様の方法で、refresh等も行うことができます。

 

PHPでのサンプルコード

(※動作保証対象外)「Webアプリ認証用URL」からアクセストークンのエンドポイントへリダイレクトし、curlでリクエスト送信、レスポンスボディのアクセストークンを取得するまでのテストコードです。index.php及びcallback.phpから成ります。 APP_ID、CALLBACK_URL、SECRETについてはお客様の環境のものに置き換えて用いてください。

index.php
<?php
// アプリ設定
define('APP_ID', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); define('CALLBACK_URL', 'http://localhost:XXXX/callback.php');
// 認証ページにリダイレクト
$params = array(
'client_id' => APP_ID,
'redirect_uri' => CALLBACK_URL,
'response_type' => 'code', );
header("Location: " . 'https://secure.freee.co.jp/oauth/authorize/'. '?' . http_build_query($params));

callback.php
<?php
// アプリ設定
define('APP_ID', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); define('SECRET', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); define('CALLBACK_URL', 'http://localhost:XXXX/callback.php');

// アクセストークンの取得
$params = http_build_query(
array(
'grant_type' => 'authorization_code',
'client_id' => APP_ID,
'client_secret' => SECRET,
'code' => $_GET['code'], //認証用URLで取得したコード
'redirect_uri' => CALLBACK_URL, ));
$headers = array( "Content-type: application/x-www-form-urlencoded" );

//POST送信
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://api.freee.co.jp/oauth/token');
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, true);

$response = curl_exec($curl);
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
$result = json_decode($body, true);

$access_token = $result['access_token'];
print_r($access_token); //テスト用に表示