LoginSignup
2
3

More than 3 years have passed since last update.

freee API 経由で領収書の画像データを登録する

Last updated at Posted at 2020-05-09

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

実際のコード

const fs = require('fs');
const FormData = require('form-data');
const axios = require('axios');
const auth_token ='freee API のアクセストークン';
const company_id = '事業所ID';


const url = `https://api.freee.co.jp/api/1/receipts`; //領収書を登録するエンドポイント
const imagePath = `./images/receipt_1.jpg`; //画像のパス
const file = fs.createReadStream(imagePath);

const form = new FormData();
form.append('receipt', file);
form.append('company_id', company_id);

const config = {
    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)); 

実行すると、無事に領収書が登録されました。

スクリーンショット 2020-05-09 15.53.21.png

ポイントとしては、領収書の画像を FormDataに追加する時に、要素名を「reciept」と指定するところあたりでしょうか。

参考情報

https://qiita.com/n0bisuke/items/1d1cfc330997f93e2ee8
https://qiita.com/kazu_death/items/a94ac4ae4d71928920c5
https://github.com/axios/axios#form-data

のびすけさんも書いていましたが、ブラウザから画像を multipart/form-data でポストする例は多いけれど、サーバー側からポストする例は少ない。

上記の記事は大変参考になりました。

2
3
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
2
3