freee の API 経由で、取引データの登録を行うコードは時折見かけますが、領収書の登録を行うコードはあまり見かけない。
そこで、領収書(画像データ)を会計freeeに登録するサンプルコードを書いてみました。
環境
Mac OS
Node.js v10.19.0
リクエストの書式を確認
freee の開発者向けサイト 「Developers Community」 からAPIへのリクエストの書式を確認する
- 登録したfreee アプリを使ってアクセストークンを取得
- Developers Community にトークンを読み込ませる
- APIリファレンスからテストコール
登録テストに使う事業所の company_id を確認するエンドポイントは 「companies」
領収書の登録用エンドポイントは「receipts」。
領収書を登録するCURLは以下の通り
curl -X POST "https://api.freee.co.jp/api/1/receipts"-H"accept: application/json"-H"Authorization: Bearer アクセストークンの文字列"-H"Content-Type: multipart/form-data"-F"company_id=事業所のID"-F"description="-F"issue_date="-F"receipt=@画像ファイル名;type=image/jpeg"
事前準備
Desktopに作業用のディレクトリを作成
mkdir imagepost
cd imagepost
npm init してパッケージをインストールする。今回使うのは
- fs
- form-data
- axios
npm init
npm install fs --save
npm install form-data --save
npm install axios --save
実際のコード
constfs=require('fs');constFormData=require('form-data');constaxios=require('axios');constauth_token='freee API のアクセストークン';constcompany_id='事業所ID';consturl=`https://api.freee.co.jp/api/1/receipts`;//領収書を登録するエンドポイントconstimagePath=`./images/receipt_1.jpg`;//画像のパスconstfile=fs.createReadStream(imagePath);constform=newFormData();form.append('receipt',file);form.append('company_id',company_id);constconfig={headers:{'accept':'application/json','Authorization':'Bearer '+auth_token,'Content-Type':'multipart/form-data',...form.getHeaders(),}}axios.post(url,form,config).then(res=>console.log(res.data)).catch(err=>console.log(err));
実行すると、無事に領収書が登録されました。
ポイントとしては、領収書の画像を FormDataに追加する時に、要素名を「reciept」と指定するところあたりでしょうか。
参考情報
https://qiita.com/n0bisuke/items/1d1cfc330997f93e2ee8
https://qiita.com/kazu_death/items/a94ac4ae4d71928920c5
のびすけさんも書いていましたが、ブラウザから画像を multipart/form-data でポストする例は多いけれど、サーバー側からポストする例は少ない。
上記の記事は大変参考になりました。