やりたいこと
クラウド会計ソフトで有名なfreee、およびfreee APIを利用すれば経理チーム的な業務改善に繋がるのではないかと思いました。そのためにとりあえずどういうことが出来そうかを試してみます。
今回は基本的な使い始める準備までをやってみました。
APIを扱えるまでの準備
ドキュメントが豊富ですが、以下をスタートにすると良さそうです。
freee アプリストア チュートリアルガイド
アプリ作成
https://app.secure.freee.co.jp/developers/applications
より、案内のまま簡単に作成できました。
アクセストークンの取得
流れとしては
- Webアプリ認証用URLへのアクセス
- 認可コードの取得
- アクセストークン
となります。
手元のGit Bashなどでcurlベースで試してみます。
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の取得
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の取得
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":"アクセスする権限がありません"
とエラーとなります。
アクセストークンを取得した時についてくるリフレッシュトークンを利用し、新たなアクセストークンを取得する必要があります。
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を使って行ける準備が出来ました。