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

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

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

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

最新のAPI仕様はこちらで公開しています。(検証用のfreeeアカウントについてはこちら

 

目次

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

 

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

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

【注意】このアプリケーションの登録はシステム開発者が行う作業であり、エンドユーザーが行う作業ではありません。開発者が発行したApp IDとSecret、認証用URLをエンドユーザーが用いることとなります。

会計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" }


それぞれのAPIは、取得した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'); 

//POSTデータ 
$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); //テスト用に表示

 

VBA

取得した認証コードを用いてVBAでリクエスト送信、レスポンスボディのアクセストークンを取得するまでのテストコードです。 APP_ID、CALLBACK_URL、SECRET、AUTH_CODEについてはお客様の環境のものに置き換えて用いてください。

'URLエンコード用ファンクション
Public Function UrlEncode(mySource As Variant) As String
 Dim objSC As Object
 Set objSC = CreateObject("ScriptControl")
 objSC.Language = "JScript"
 UrlEncode = objSC.CodeObject.encodeURIComponent(mySource)
 Set objSC = Nothing
End Function
----------------------------------------------------------
'連携アプリ情報
Dim APP_ID: APP_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Dim SECRET: SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Dim CALLBACK_URL: CALLBACK_URL = "XXXXXXXXXXXXXXXXXXXXXXXX"
Dim AUTH_CODE: AUTH_CODE = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 

'リクエスト先URLとリクエストボディ
Dim url_api: url_api = "https://api.freee.co.jp/oauth/token"
Dim request_body: request_body = "grant_type=authorization_code" & "&client_id=" & APP_ID & "&client_secret=" & SECRET & "&code=" & AUTH_CODE & "&redirect_uri=" & UrlEncode(CALLBACK_URL)
 
'レスポンスとトークンを格納する変数を宣言
Dim js As String
Dim AccessToken As String
Dim RefreshToken As String

'tokenのPOSTリクエストを送信
 With CreateObject("MSXML2.XMLHTTP")
 .Open "POST", url_api, False
 .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
 .send request_body
 js = .responseText
 End With

'レスポンスからアクセストークン、リフレッシュトークンを取得
js = "(" & js & ")"
With CreateObject("ScriptControl")
 .Language = "JScript"
 AccessToken = .CodeObject.eval(js).access_token
 RefreshToken = .CodeObject.eval(js).refresh_token
End With

 

Google Apps Script(GAS)

取得した認証コードを用いてGASでリクエスト送信、レスポンスボディのアクセストークンを取得するまでのテストコードです。 APP_ID、CALLBACK_URL、SECRET、AUTH_CODEについてはお客様の環境のものに置き換えて用いてください。

//連携アプリ情報
 var APP_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
 var CALLBACK_URL = "XXXXXXXXXXXXXXXXXXXXXXXX"
 var SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
 var AUTH_CODE = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

//リクエスト先URL
 var url_token = "https://api.freee.co.jp/oauth/token"
 var encoded_CALLBACK_URL ="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"    //CALLBACK_URLをエンコードしたもの

//リクエストボディ
 var request_body = "grant_type=authorization_code"+"&client_id="+APP_ID+"&client_secret="+SECRET+"&code="+AUTH_CODE+"&redirect_uri="+encoded_CALLBACK_URL

// POSTオプション
 var options = {
 "method" : "POST",
 "payload" : request_body
}

//POSTリクエストを送信
 var response = UrlFetchApp.fetch(url_token,options).getContentText(); 

// レスポンスからアクセストークン、リフレッシュトークンを取得
 var tokenResponse = JSON.parse(response);
 var access_token =tokenResponse.access_token
 var refresh_token =tokenResponse.refresh_token