APIを使用して法人番号から法人情報を取得する方法
はじめに
国税庁の法人番号公表サイトで公開されているAPIを使用し、入力された法人番号から法人情報を取得する方法をまとめたいと思います。
今回はLaravelを使用しましたが、APIの記述方法自体はどの言語でも応用できると思います。
Laravelのバージョンは8.0で動作確認をしています。
実装の前に
国税庁の法人番号システム Web-APIを使用するには、事前にアプリケーションIDの申し込みが必要になります。
申し込みは下記のサイトから行え、発行までに1週間ほどかかります。
実装
国税庁のWeb-APIはこちらのサイトから確認ができます。
今回は法人番号より法人情報を取得をしていきますが、法人名から法人番号等を取得することもできます。
実装方法や取得できる情報に関しては公式サイトにある下記のファイルを見ていただけると分かりやすいと思います。
また、今回はあくまでもAPIに焦点を当てるため、フロント側の実装は割愛します。
では、さっそくControllerに書いていきたいと思います。
まずは、APIを叩くためのURLを記述します。
public function getCompanyInformation(Request $request)
{
$api_url = 'https://api.houjin-bangou.nta.go.jp/4/num' . // 4はWEB-APIのバージョンで4が最新のものになります
'?id=' . env('APPLICATION_ID') .
'&number=' . $request->input('company_number') . // 入力された法人番号
'&type=02&history=0';
}
最後の行にあるtype=02
ですがこちらは応答形式を指定しています。
02は「CSV 形式/Unicode」となっており、その他にも01は「CSV 形式/Shift-JIS」、12は「XML 形式/Unicode」が指定可能となっています。
続いて、作成したAPIを叩き法人情報を取得します。
public function getCompanyInformation(Request $request)
{
$api_url = 'https://api.houjin-bangou.nta.go.jp/4/num' . // 4はWEB-APIのバージョンで4が最新のものになります
'?id=' . env('APPLICATION_ID') .
'&number=' . $request->input('company_number') . // 入力された法人番号
'&type=02&history=0';
$response = Http::get($api_url);
}
APIからのレスポンスが$response
に入っているため、$response
をデバッグをすると企業名や所在地が確認できるかと思います。
ただ今のままだと形式は先ほど指定した「CSV 形式/Unicode」となっており使用しづらいので、配列に変換をしていきたいと思います。
public function getCompanyInformation(Request $request)
{
$api_url = 'https://api.houjin-bangou.nta.go.jp/4/num' . // 4はWEB-APIのバージョンで4が最新のものになります
'?id=' . env('APPLICATION_ID') .
'&number=' . $request->input('company_number') . // 入力された法人番号
'&type=02&history=0';
$response = Http::get($api_url);
$fp = tmpfile();
fwrite($fp, $csv_data);
fseek($fp, 0);
$data = [];
while($company_data = fgetcsv($fp)) {
if($loop === 0) continue; // 1行目はヘッダーなのでスキップする
$data[] = [
'name' => $company_data[6], // 法人名,
'post_code' => $company_data[15], // 郵便番号,
'address' => $company_data[9] . $company_data[10] . $company_data[11] // 住所
];
}
return $dsta;
}
これで配列の状態でフロントへ渡すことができたので、フロント側でも扱いやすいかと思います!
さいごに
比較的簡単に法人番号より法人情報を取得することができました!
今回は長くなりそうだったのでフロント側は割愛したのですが、非同期通信を使用しフロントも書いたので、また機会があれば書いていきたいと思います。
最後まで読んでいただきありがとうございました!
Discussion