7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

freeeのAPI入門(OAuth2認証してユーザー情報を取得する)

Posted at

はじめに

2016年12月3日、Startup weekend Tokyo Fintech #2のプレイベント「freee API ハッカソン」に参加してきました。freeeの方にサポートしていただき、freeeのAPIを教えていただきました。

ハッカソン当日、会計ソフト freee公開されているAPIが使えるまで、少々手間取ったので、メモを残します。

前準備

API ドキュメントより抜粋

  1. freeeにサインアップします。
  2. アプリケーション一覧から「新しいアプリケーションを登録」します。
  3. アプリケーションの登録が完了すると、AppIDとSecretが取得できます。
  4. ローカルの開発環境でテストする際は、認証用URLを直接リクエストしてAuthorization Codeを取得できます。

アプリケーションの登録をするとき、コールバックURIの入力が必要です(あとで変更も可能)。あらかじめ、どこで動かすか考えておいたほうがよいです。このコールバックURIに指定するURIは、外部から接続できないアドレス(例えば、localhost)でも問題ありません。

動かしてみる

コード

【注意】

  • $_GETをそのまま処理してたりするので、実際にはちゃんとチェック(サニタイズ?)したほうがよい。
sample.php
<?php

    define( 'APP_ID', 'APPIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' );
    define( 'APP_SECRET', 'SECRETxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' );
    define( 'APP_CALLBACK', 'http://http://192.168.110.202//freee20161204/sample.php' );
    //※注意:APP_CALLBACKの値は、freeeのアプリケーション一覧に登録されている
    //       コールバックURIと同じにする必要があります。

    // (1) いちばん最初の処理。OAuth2の入り口。
    if( empty( $_GET ) )
    {
        printf('<html><a href="%s?client_id=%s&redirect_uri=%s&response_type=code">認証開始</a></html>',
                'https://secure.freee.co.jp/oauth/authorize',   //認証用
                APP_ID, 
                urlencode( APP_CALLBACK )
        );
    }

    // (2) freeeで「許可する」が押されたあとに実行する処理
    if( ! empty( $_GET['code'] ) )
    {
        $content = [
            "code"          => $_GET['code'],
            "grant_type"    => "authorization_code",
            "client_id"     => APP_ID,
            "client_secret" => APP_SECRET,
            "redirect_uri"  => APP_CALLBACK,
        ];

        $curl = curl_init( 'https://api.freee.co.jp/oauth/token.json' );    //認証済みToken取得用
        curl_setopt( $curl, CURLOPT_POST, TRUE );
        curl_setopt( $curl, CURLOPT_POSTFIELDS, http_build_query( $content ) );
        curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true);
        $jsonToken = curl_exec($curl);
        $token = json_decode( $jsonToken, true );        

        var_dump( $token );
    }

    // (3) Token取得後の処理。各種APIの実行
    if( ! is_null( $token['access_token'] ) )
    {
        $header = [
            'Authorization: Bearer ' . $token['access_token'],
        ];

        $curl = curl_init( 'https://api.freee.co.jp/api/1/users/me?companies=true' );  //自分の情報
        curl_setopt( $curl, CURLOPT_HTTPHEADER, $header );
        curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true);
        $jsonResult = curl_exec($curl);
        $result = json_decode( $jsonResult, true );

        var_dump( $result );
    }

動作結果

(1) いちばん最初の処理。OAuth2の入り口。

image

(2) freeeで「許可する」が押されたあとに実行する処理

image

(3) Token取得後の処理。各種APIの実行

(2)の下の部分。自分の情報が取得できている

ハマった点・ワンポイント

  • 取得したTokenは24時間有効。
  • 多くのAPIで事業所ID(company_id)が必要。
    この事業所IDは、freeeに通常ログインしたときの会社名をクリックして表示される数字(xxxx-yyyy-zzzz)じゃない。Users(ユーザ)や Companies(事業所)で取得した値を使用する必要がある。

最後に

今度の週末(12月09日~11日)に開催されるStartup Weekend Tokyo Fintech #2でfreeeのデータにアクセスしようとした時に少しでも参考になれば幸いです。

7
10
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
7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?