アクセストークンの取得方法
これが 先ほどのauthorization code を取得する方法みたい。
アクセストークンを取得するためには、「Webアプリ認証用URL」(https://accounts.secure.freee.co.jp/public_api/authorize?client_id=${お客様のClient ID}&redirect_uri=${お客様のコールバックURI}&response_type=code)にて認証コード(Authorization code)を取得し、それを用いたhttpリクエストを送る必要があります。認証コードの有効期間は10分です。
はまった。${}は要らんみたい。
https://accounts.secure.freee.co.jp/public_api/authorize?client_id=898546c46ca42gh6960e1a6579327e629706050978yx83961a1c46be3cec5f78&redirect_uri=urn:trgf:wg:oauth:2.0:oob&response_type=code
使ったCURLコマンド
curl -s -S --compressed -tlsv1.2 https://accounts.secure.freee.co.jp/public_api/token -i -X POST -H 'Content-Type:application/x-www-form-urlencoded' -d 'grant_type=authorization_code' -d 'client_id=898546c46ca42gh6960e1a6579327e629706050978yx83961a1c46be3cec5f78' -d 'client_secret=58b557e2e6577d4b627a7a217bc7856891f3d586cd38ec0502cebfe7c4730fc7' -d 'code=c173f5exc8e5208320ddfa86db66c973dba895fcbcdd704265c036f1b52e6rf9' -d 'redirect_uri=urn:trgf:wg:oauth:2.0:oob'
無事アクセストークンが取れました。
{"access_token":"xYzxccb3f155c9ab924f7232f449703d94777d22d1dcb3039908d501b3bb85853","token_type":"bearer","expires_in":86399,"refresh_token":"xced554043f399093315f61d5af11771716c41bf678a60035203ed709267d93","scope":"default_read accounting:account_items:read accounting:companies:read accounting:deals:read accounting:docs:read","created_at":1644818713}
freee APIを使ってアクセスしてみます。
アクセストークンを使って実際にデータを取ってみよう。
curl -s -S --compressed -tlsv1.2 https://api.freee.co.jp/api/1/companies -i -X GET -H 'Authorization:Bearer xYzxccb3f155c9ab924f7232f449703d94777d22d1dcb3039908d501b3bb85853' -H 'Content-Type:application/json'
結果です。jsonだ。Content-Type:application/xml としたけど変化なし。
{"companies":[{"id":1588789,"name":"","name_kana":"","display_name":"〇電機株式会社","role":"admin"},{"id":2014076,"name":"","name_kana":"","display_name":"〇電機株式会社2","role":"admin"},{"id":2080611,"name":null,"name_kana":null,"display_name":"△プラン: 開発用テスト環境","role":"admin"}]}
注意)ここでの例は本物に似せた実際とは違うIdを使っています。
エラーメッセージ。
-
{"error":"unsupported_grant_type","error_description":"この認可グラントのタイプは認可サーバではサポートされていません。"}
${}があったためだ... -
{"error":"invalid_grant","error_description":"指定された認可グラントは不正か、有効期限切れか、無効か、リ ダイレクトURIが異なるか、もしくは別のクライアントに適用されています。"}
まだ有効である時に 先ほどのauthorization codeを使ってサクセストークンを取得しようとしたからかな?
アクセストークン等の自動取得(変数に)するための予行演習。
jqを使ってname形式に変換できればいいんですがね。
なんかごちゃごちゃしていますが、以下のようにすれば変数として使えそうです。
| jq . | sed -e 's/"//g' | sed -e 's/://g' | sed -e 's/,//g' | sed -e 's/{//g' | sed -e 's/}//g' | sed '/^$/d' | sed -e 's/^[ \t]*//' |
cat > $tmp-loginInfo
access_token=$(nameread access_token $tmp-loginInfo)
以前の設定のままで接続してみると
{"message":"アクセスする権限がありません","code":"expired_access_token"}
さすがですねぇ、トークンの再作成が必要です。