はじめに
2016年12月3日、Startup weekend Tokyo Fintech #2のプレイベント「freee API ハッカソン」に参加してきました。freeeの方にサポートしていただき、freeeのAPIを教えていただきました。
ハッカソン当日、会計ソフト freeeの公開されているAPIが使えるまで、少々手間取ったので、メモを残します。
前準備
API ドキュメントより抜粋
- freeeにサインアップします。
- アプリケーション一覧から「新しいアプリケーションを登録」します。
- アプリケーションの登録が完了すると、AppIDとSecretが取得できます。
- ローカルの開発環境でテストする際は、認証用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の入り口。
(2) freeeで「許可する」が押されたあとに実行する処理
(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のデータにアクセスしようとした時に少しでも参考になれば幸いです。