Freeeのアプリを作成してみる Part 1
皆さん、おはようございます。本日はFreeeさんのAPIにつなげてアプリを作成してみたいと思います。
FreeeさんのAPI詳細に関してはこちらをご参照ください。
いろいろとつなぎこみができそうでワクワク。
まずは第1弾として、いま開発しているレシートローラーにてFreee内のファイルボックスにデータを転送できるような仕組みを作ってみたいと思います。
アプリの作成
次のステップへ進む前に先にテスト用の事業所を作成しておいてください。そのテスト用の事業所に対して実装を進めていきます。
それでは早速作っていきましょう。
こちらにて現在のアプリ一覧を確認することができます。
この画面の右上にあるアプリケーションの作成をクリックします。
作成フローはこちらを参照ください。
入力項目にそって必要な項目を入れて進めていきます(このあたりいったん割愛します)
アプリの権限を設定する必要があります、まずはファイルボックスに対しての読み込みと更新をチェックします。
APIを利用するための認証
APIを利用するにはFreeeの利用者許諾する必要があります。ですのでAPIを利用する前に一度Freee側に遷移をしログインをしていただく必要があります。ログイン時にTokenをいただき、そのTokenを利用してAPIを使用していくような流れです。
下記がページのスクショです。これに沿ってすすめます。
一番初めの許可コード取得確認へユーザーを遷移させるには 下記のフォーマットでユーザーを遷移させます。
https://accounts.secure.freee.co.jp/public_api/authorize?response_type=code&client_id={アプリのclient_id}&redirect_uri={アプリのコールバックURL}
そうすると下記のように戻ってきます。(正常の場合)
HTTP/1.1 302 found Location: {アプリのコールバックURL}?code={認可コード}
そのあとに下記のようにAPIでトークンを取得します。
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=アプリのencodedコールバックURL" \
'https://accounts.secure.freee.co.jp/public_api/token'
ここで入力しているアプリのencodedコールバックURLは何に使われているのでしょう・・よくわからないままですが、いったん入力します。
コードを受け取ってAPIのトークンを取得
ということで まずは、許可コードを受け取るページを準備してみました。
[Route("/freee/callback")] public async Task<IActionResult> callback(string code) { using (var httpClient = new HttpClient()) { using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://accounts.secure.freee.co.jp/public_api/token")) { var contentList = new List<string>(); contentList.Add("grant_type=authorization_code"); contentList.Add("client_id=" + _clientId); contentList.Add("client_secret=" + _clientSecret); contentList.Add("code=" + code); contentList.Add("redirect_uri=" + _redirectUri); request.Content = new StringContent(string.Join("&", contentList)); request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded"); var response = await httpClient.SendAsync(request); var responseString = await response.Content.ReadAsStringAsync(); var token = JsonSerializer.Deserialize<FreeeAuthTokenResponseModel>(responseString); // Do something here with token // } } return View(); }
先ほど適当に入力してしまったコールバックURL部分に受け取るURLを設定してみます。
いったんredirect先をlocalhostに設定してテストをしてみます。
breakして正しい値が戻ってきているか確認
大丈夫なようです。このまま進めます。
次回は実際にファイルボックスにファイルを保存する部分を作ってみます。