4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

Salesforce からクラウド会計ソフト freee の API にアクセスする

Last updated at Posted at 2023-07-19

皆さん、こんにちは!今回は、クラウド会計ソフトである freee さんの API を Salesforce の外部サービス経由でフローから呼び出す方法をご紹介してみます。外部サービスを利用することで、Salesforceから他のサービスのAPIをノーコードで呼び出すことができるようになります。また、外部サービス自体もノーコードで設定でき、30分程度で完了するのでぜひ挑戦してみてください。

前提事項

  • 今回は、freee さんが提供してくれている無料の開発者向けアカウントを利用します。freee API スタートガイド の手順の中で、API連携に必要なアカウント、事業所、アプリケーションで取得できるので事前に完了しておいてください。
  • また、Salesforce の検証環境についても、無料の Developer Edition にサインアップすることで取得できます。

連携の大まかな流れ

Salesforce から freee のアプリケーションを介して事業所のデータにアクセスするには、Salesforce 上で(1)認証情報を登録し、(2)利用するAPIリソースを登録するという流れになります。そのためにそれぞれ以下の設定を追加します。

(1) 認証情報を登録には...

  • 認証プロバイダ
  • 指定ログイン情報(+ 外部ログイン情報 + プリンシパル + 権限セット)

(2) 利用するAPIリソースを登録には...

  • 外部サービス

これらの設定は最初に一度作成しておけば、Salesforce の複数のノーコードツールやコードから繰り返し利用する事ができます。
この記事では、これらを作成する手順と設定の利用方法について順を追って紹介していきます。

freee 連携の設定手順

1. 認証プロバイダを作成する

1-1. 認証プロバイダの作成に必要な情報を取得
  • 認証プロバイダを作成するためには、事前にfreee のアプリケーションから コンシューマ鍵(Client ID)コンシューマの秘密(Client Secret)を取得します。
  • これらの情報は、開発アプリ一覧から 開発用テストアプリ > 基本情報から取得できます。
1-2. 認証プロバイダーを作成
  • 次に Salesforce にログインし、設定 > ID > 認証プロバイダ > 新規 から以下の要領で作成、保存します。
項目
プロバイダタイプ Open ID Connect
名前 freee Auth Provider
URL 接尾辞 freee_Auth_Provider
コンシューマ鍵 <1-1 でコピーしたコンシューマ鍵(Client ID)>
コンシューマの秘密 <1-1 でコピーしたコンシューマの秘密(Client Secret)>
承認エンドポイント URL https://accounts.secure.freee.co.jp/public_api/authorize?prompt=select_company
トークンエンドポイント URL https://accounts.secure.freee.co.jp/public_api/token
1-3. freee アプリケーションの設定を変更
  • 認証プロバイダを作成すると、コールバック URL が生成されるのでコピーします。

再び freee の 開発用テストアプリ を開き、コールバックURL に貼り付け下書き保存します。

さらに権限設定タブを開き、[会計] 事業所参照 にチェックを入れておきます。

認証プロバイダの動作確認
それでは、ここまでの設定が正しく動作するか確認します。
認証プロバイダを開き、テスト専用初期化 URLをコピーします

そのアドレスをブラウザ開くとアプリの連携を確認するページが表示されるので、許可します。

連携が成功するすると、このような XML ファイルが表示されれば成功です。

2. 指定ログイン情報を作成

指定ログイン情報は、freee のAPIにアクセスする際の認証情報の管理を行います。指定ログイン情報を作成するには、外部ログイン情報とそれに紐づくプリンシパルを作成する必要があります。また作成した認証情報の利用にはプリシパルへのアクセス権限必要になりますので、ここでは順に対応していきます。

2-1. 外部ログイン情報を作成
  • 設定 > セキュリティ > 指定ログイン情報 > 外部ログイン情報 > 新規 から以下の要領で外部ログイン情報を作成します。
項目
表示ラベル freee External Credential
名前 freee_External_Credential
認証プロトコル OAuth 2.0
認証フロー種別 ブラウザフロー
認証プロバイダ freee Auth Provider
2-2. プリンシパルを作成
  • 作成した外部ログイン情報を開き、プリンシパルを以下の要領で作成します、
項目
パラメータ名 freee External Credential Principal
ID 種別 指定ユーザ
  • 作成したプリンシパルで認証を済ませておきます。
2-3. 指定ログイン情報を作成
  • 設定 > セキュリティ > 指定ログイン情報 > 指定ログイン情報 > 新規 から以下の要領で指定ログイン情報を作成します。
項目
表示ラベル freee Named Credential
名前 freee_Named_Credential
URL https://api.freee.co.jp/
コールアウトに対応 ON
外部ログイン情報 freee External Credential
2-4. プリンシパルへのアクセス権を追加
  • 設定 > ユーザ > 権限セット > 新規 から、先程作成したプリンシパルへのアクセス権を追加した新しい権限セットを作成します。
  • 設定 > ユーザ > ユーザ > [自分のユーザ] > 権限セットの割り当て > 割り当ての編集から現在のユーザに割り当てておきましょう。

指定ログイン情報の動作確認
ここまでの設定が正しく動作するか確認します。
開発者コンソールを開き、Debug > Open Execute Anonymous Window を起動します。
以下のコードを実行し、ログを確認しましょう。

HttpRequest req = new HttpRequest();
req.setMethod('GET');
req.setEndpoint('callout:freee_Named_Credential/api/1/companies');

Http http = new Http();
HTTPResponse res = http.send(req);
System.debug(res.getBody());

ログの USER_DEBUG が以下の様に出力されていれば成功です。

3. 外部サービスを作成

  • 設定 > インテグレーション > 外部サービス > 外部サービスを追加 からウィザードに従って外部サービスを作成します。
  • freee では OAS3 のAPI仕様が公開されているで「API仕様から」を選択します。
  • 次に「登録の詳細を入力」画面では、以下の要領で設定を追加します。
項目
外部サービス名 freeeExtenalService
サービススキーマ 完全な JSON
指定ログイン情報を選択 freee_Named_Credential
JSON こちらのテキストをコピーして貼り付け
  • APIの仕様上送信されるメディアタイプの全てをSalesforceがサポートしていないので、対応付けを要求されます。今回の検証では以下の設定にしておきます。
  • 最後に、取り込むAPIを選択後、確認画面を経て設定は完了です。今回は、get_companies と get_company を選択しておきます。

freee 連携の利用手順

  • それでは、実際にフローから外部サービスを呼び出して動作を確認しましょう。今回は「アクション」要素を一つだけ持った、動作確認用のフローを作成しました。
  • アクションの設定内容は以下のとおりです。
  •  デバッグ ボタンから起動して結果を確認します。以下の様に、コード200で事業所名が取得できていれば成功です!お疲れ様でした。
4
3
2

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?