LoginSignup
8
5

More than 5 years have passed since last update.

freee APIを使ってみました(準備:登録~アクセストークンの取得と、事業所IDの取得、ユーザーIDの取得、アクセストークンのリフレッシュ)

Posted at

やりたいこと

クラウド会計ソフトで有名なfreee、およびfreee APIを利用すれば経理チーム的な業務改善に繋がるのではないかと思いました。そのためにとりあえずどういうことが出来そうかを試してみます。
今回は基本的な使い始める準備までをやってみました。

APIを扱えるまでの準備

ドキュメントが豊富ですが、以下をスタートにすると良さそうです。
freee アプリストア チュートリアルガイド

アプリ作成

https://app.secure.freee.co.jp/developers/applications
より、案内のまま簡単に作成できました。

アクセストークンの取得

流れとしては
1. Webアプリ認証用URLへのアクセス
2. 認可コードの取得
3. アクセストークン
となります。

手元のGit Bashなどでcurlベースで試してみます。

sample.sh
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=urn:ietf:wg:oauth:2.0:oob" \
 'https://accounts.secure.freee.co.jp/public_api/token'

取得できました。

{"access_token":"XXXXXXXXXXXXXXXXXXXXXXXXX","token_type":"bearer","expires_in":86400,"refresh_token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","scope":"read write default_read","created_at":1556711794}

事業所IDや自分のIDの取得

ここからはリファレンスも一緒に見てゆくと良さそうです(Swagger UIでしょうか。見やすいですね!)。
リファレンス

色々試すにあたり、自身の事業所IDや自分自身のユーザーIDが必要そうなので取得してみます。

事業所IDの取得

sample.sh
curl -i -X GET \
  -H "Authorization:Bearer (★さっき取得したアクセストークン)" \
  -H "Content-Type:application/json" \
'https://api.freee.co.jp/api/1/companies'

↓結果を確認します。

{"companies":[
{"id":(数値),"name":"株式会社ヴァリューズ","name_kana":"ヴァリューズ","display_name":"株式会社ヴァリューズ","role":"read_only"}]

ユーザーIDの取得

sample.sh
curl -i -X GET \
  -H "Authorization:Bearer (★さっき取得したアクセストークン)" \
  -H "Content-Type:application/json" \
'https://api.freee.co.jp/api/1/users/me'

↓結果を確認します。

{"user":{"id":(数値),"email":"(メアド)","display_name":null,"first_name":null,"last_name":null,"first_name_kana":null,"last_name_kana":null}

アクセストークンのリフレッシュ

ところで、アクセストークン取得時の

"expires_in":86400,

から分かる通り、86400秒(24時間)で破棄されます。24時間を過ぎてアクセスすると

401 Unauthorized
{"message":"アクセスする権限がありません"

とエラーとなります。
アクセストークンを取得した時についてくるリフレッシュトークンを利用し、新たなアクセストークンを取得する必要があります。

sample.sh
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」)" \
 'https://accounts.secure.freee.co.jp/public_api/token'

取得できました。

{"access_token":"YYYYYYYYYYYYYYYYYYYY","token_type":"bearer","expires_in":86400,"refresh_token":"YYYYYYYYYYYYYYYYYYYYYYYYYYY","scope":"read write default_read","created_at":1556954721}

リフレッシュトークンも更新されます。前のリフレッシュトークンでやろうとすると

{"error":"invalid_grant","error_description":"指定された認可グラントは不正か、有効期限切れか、無効か、リダイレクトURIが異 なるか、もしくは別のクライアントに適用されています。"}

といったエラーになります。そらそうですね。

という訳で、色々とAPIを使って行ける準備が出来ました。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5