Freeeのアプリを作成してみる Part 1

2021-06-21
Freee

皆さん、おはようございます。本日はFreeeさんのAPIにつなげてアプリを作成してみたいと思います。

FreeeさんのAPI詳細に関してはこちらをご参照ください。

いろいろとつなぎこみができそうでワクワク。

まずは第1弾として、いま開発しているレシートローラーにてFreee内のファイルボックスにデータを転送できるような仕組みを作ってみたいと思います。

アプリの作成

次のステップへ進む前に先にテスト用の事業所を作成しておいてください。そのテスト用の事業所に対して実装を進めていきます。

それでは早速作っていきましょう。

こちらにて現在のアプリ一覧を確認することができます。

この画面の右上にあるアプリケーションの作成をクリックします。 "アプリケーションの作成"

作成フローはこちらを参照ください。

入力項目にそって必要な項目を入れて進めていきます(このあたりいったん割愛します)

アプリの権限を設定する必要があります、まずはファイルボックスに対しての読み込みと更新をチェックします。 ファイルボックスに対しての読み込みと更新

APIを利用するための認証

APIを利用するにはFreeeの利用者許諾する必要があります。ですのでAPIを利用する前に一度Freee側に遷移をしログインをしていただく必要があります。ログイン時にTokenをいただき、そのTokenを利用してAPIを使用していくような流れです。

下記がページのスクショです。これに沿ってすすめます。 Freeeトークン取得

一番初めの許可コード取得確認へユーザーを遷移させるには 下記のフォーマットでユーザーを遷移させます。

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を設定してみます。 FreeeコールバックURL

いったんredirect先をlocalhostに設定してテストをしてみます。

"アプリ許可"

breakして正しい値が戻ってきているか確認

"breakして正しい値が戻ってきているか確認"

大丈夫なようです。このまま進めます。

次回は実際にファイルボックスにファイルを保存する部分を作ってみます。

Freeeのアプリを作成してみる Part 2へ進む

公開日: 2021-06-19