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

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

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

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

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

freee API

 

目次

  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でAPI認証からアクセストークンの取得するまでのテストコードです。 APP_ID、SECRET、CALLBACK_URLについてはお客様の環境のものに置き換えて用いてください。 ※freeeにアプリ登録をする際のCALLBACK_URLには「https://script.google.com/macros/d/{スクリプト ID}/usercallback」を用いてください ※OAuth2認証用に外部のライブラリを参照しています

/*
***********************************************************************************
参照ライブラリ
title               |OAuth2
project_key  |1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
***********************************************************************************
*/

//連携アプリ情報(Googleスプレッドシートサンプルファイル)
var APP_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

// 認証のエンドポイントとなるダイアログ
function alertAuth() {
  var service = getService();
  var authorizationUrl = service.getAuthorizationUrl();
  var template = HtmlService.createTemplate('認証. ');
  template.authorizationUrl = authorizationUrl;
  var page = template.evaluate();
  SpreadsheetApp.getUi().showModalDialog(page, "認証が必要です");
}

//freeeAPIのサービスを取得
function getService() {
  return OAuth2.createService('freee')
      .setAuthorizationBaseUrl('https://secure.freee.co.jp/oauth/authorize')
      .setTokenUrl('https://api.freee.co.jp/oauth/token')
      .setClientId(APP_ID)
      .setClientSecret(SECRET)
      .setCallbackFunction('authCallback')
      .setPropertyStore(PropertiesService.getUserProperties())
}

//認証コールバック(アクセストークンの取得)
function authCallback(request) {
  var service = getService();
  var isAuthorized = service.handleCallback(request);
  var access_token = service.getAccessToken();

  if (isAuthorized) {
    return HtmlService.createHtmlOutput('認証に成功しました。タブを閉じてください。');
  } else {
    return HtmlService.createHtmlOutput('認証に失敗しました。タブを閉じてください。');
  }
}

 

サンプルファイル

freee APIを用いてfreeeとデータ連携を行えるExcelとGoogleスプレッドシートのサンプルファイルです。連携を試す際やコードの参考にご使用ください。
※サンプルファイル用にfreee APIへアプリケーションを登録し、APP_ID、SECRETを取得してあるため、そのままご使用いただけます。
※サンプルファイル関してサポートは行っておりませんので、ご了承ください。

・Googleスプレッドシートサンプルファイル(コピーしてご使用ください)

freee API-認証サンプルファイル(Googleスプレッドシート)

・Excelサンプルファイル