DjangoアプリケーションへのQuickBooks統合入門

By manhnv, at: 2025年3月28日10:32

Estimated Reading Time: __READING_TIME__ minutes

A Short Introduction to Integrate QuickBooks to Django Application
A Short Introduction to Integrate QuickBooks to Django Application

QuickBooksDjangoアプリケーションに統合することで、会計業務の効率化、財務ワークフローの自動化、ビジネス効率の向上が実現します。請求書発行、経費追跡、顧客データの同期など、どのようなアプリを構築する場合でも、QuickBooksとDjangoを連携させることは強力なソリューションとなります。このブログでは、この統合を始めるための基本的な手順を説明します。

 

QuickBooksとDjangoを統合する理由

 

QuickBooksは、企業が財務を管理するために使用する一般的な会計ソフトウェアであり、DjangoはWebアプリケーションを構築するための堅牢なPythonフレームワークです。これら2つを組み合わせることで、以下が可能になります。
 

  • アプリとQuickBooks間のデータ同期を自動化します。
     
  • ユーザーにリアルタイムの財務情報を提供します。
     
  • 手動でのデータ入力とエラーを削減します。

 

前提条件

 

始める前に、以下の準備を済ませてください。
 

  • セットアップ済みで稼働しているDjangoプロジェクト。
     
  • QuickBooks Onlineアカウント(サンドボックスまたはライブ)。
     
  • Pythonのパッケージ(requestsなど)またはintuit-oauthやquickbooks-pythonなどのSDK。
     
  • 認証のためのOAuth 2.0の基本的な知識。

 

QuickBooksとDjangoを統合する手順

 

Step 1: QuickBooks APIアクセスを設定する


まず、Intuit Developer Portalでアプリを登録して、クライアントIDとクライアントシークレットを取得する必要があります。これにより、DjangoアプリがQuickBooks APIを介してQuickBooksと通信できるようになります。テスト目的でサンドボックスモードを有効にします。

 

Step 2: 必要なライブラリをインストールする


QuickBooks APIと対話するには、python-quickbooksライブラリを使用します。これは、QuickBooks Online統合用に特別に設計された、軽量で強力なPythonパッケージです。このライブラリは、認証、APIリクエスト、データ処理を簡素化するため、Djangoアプリケーションに最適です。
 

ライブラリのインストール

 

python-quickbooksライブラリをインストールすることから始めます。ターミナルを開き、Djangoプロジェクトディレクトリに移動して、次のコマンドを実行します。

 

pip install python-quickbooks


これにより、ライブラリとその依存関係がダウンロードされ、インストールされます。仮想環境を使用している場合は、仮想環境がアクティブになっていることを確認してください。

 

なぜpython-quickbooksを使うのか?

 

python-quickbooksライブラリは、既製のクラスを提供することで、QuickBooks APIの呼び出しを簡素化します。つまり、開発者は生のリクエストとレスポンスを手動で処理する必要がなくなり、統合がより迅速かつ容易になります。

 

例えば、請求書を手動で取得する場合:

 

import requests
import json

# 認証の詳細とAPIエンドポイント
access_token = "your_access_token"
realm_id = "your_realm_id"
url = f"https://sandbox-quickbooks.api.intuit.com/v3/company/{realm_id}/query"
# HTTPリクエストのヘッダー
headers = {
    "Authorization": f"Bearer {access_token}",
    "Accept": "application/json",
    "Content-Type": "application/text"
}
# 請求書を取得するためのSQLライクなクエリ
query = "SELECT * FROM Invoice WHERE Id = '123'"


# QuickBooks APIにPOSTリクエストを送信
response = requests.post(url, headers=headers, data=query)
# レスポンスを手動で処理
if response.status_code == 200:
    data = response.json()
    invoices = data["QueryResponse"]["Invoice"]
    print(invoices)
else:
    print(f"Error: {response.status_code} - {response.text}")

 

そして、このライブラリを使用して請求書を取得する

 

from quickbooks import QuickBooks
from quickbooks.objects import Invoice

# 資格情報を使用してQuickBooksクライアントを初期化する
client = QuickBooks(
    sandbox=True,                    # テスト用にサンドボックスモードを使用
    consumer_key="your_client_id",   # Intuit Developer PortalからのクライアントID
    consumer_secret="your_client_secret",  # Intuitからのクライアントシークレット
    access_token="your_access_token",      # OAuth 2.0アクセストークン
    access_token_secret="your_access_token_secret",  # OAuth 2.0トークンシークレット
    company_id="your_realm_id"       # QuickBooks会社ID(Realm ID)
)

# IDで請求書を取得する
invoice = Invoice.get(id=123, qb=client)

# 請求書の詳細を出力する
print(invoice.to_json())  # またはinvoice.TotalAmtなどの属性にアクセスする

 

Step 3: 認証を設定する

 

QuickBooksは、安全なアクセスにOAuth 2.0を使用しています。Djangoアプリを接続するには、クラスベースのビューを使用して認証フローを実装する必要があります。
 

  1. トークンを取得する:ユーザーをQuickBooksの承認URLにリダイレクトして承認コードを取得し、それをトークンと交換します。
     
  2. 資格情報を保存する:トークンを安全に保存します(データベースやセッションなど)。
     
  3. クライアントを設定する:python-quickbooksを使用してクライアントを初期化します。
     

QuickBooksの設定の詳細については、QuickBooks OAuth 2.0ドキュメントを参照してください。

 

Djangoアプリでこのプロセスを処理するためのコードを以下に示します。

 

views.py

 

import uuid

import requests

from django.views.generic import RedirectView, View
from django.shortcuts import redirect
from django.conf import settings

from quickbooks import QuickBooks


 

# ボタンをクリックしたときにOAuthフローを開始するビュー
class QuickBooksAuthView(RedirectView):
    permanent = False
    
    def get_redirect_url(self, *args, **kwargs):
        # CSRF保護のためのユニークなステートトークンを生成
        state_token = str(uuid.uuid4())
        self.request.session['state_token'] = state_token
        
        # QuickBooks OAuth 2.0認証URL
        auth_url = (
            "https://appcenter.intuit.com/connect/oauth2"
            "?client_id={}&response_type=code"
            "&scope=com.intuit.quickbooks.accounting"
            "&redirect_uri={}&state={}"
        ).format(
            settings.QB_CLIENT_ID,       # settings.pyからのクライアントID
            settings.QB_REDIRECT_URI,   # settings.pyからのリダイレクトURI
            state_token                 # セキュリティのためのステートトークン
        )
        return auth_url

# QuickBooksからのリダイレクトURI(コールバック)を処理するビュー
class QuickBooksCallbackView(View):
    def get(self, request, *args, **kwargs):
        # コールバックURLからコードとステートを抽出
        auth_code = request.GET.get('code')
        state = request.GET.get('state')
        realm_id = request.GET.get('realmId')
        
        # CSRFを防ぐためにステートトークンの一致を確認
        if state != request.session.get('state_token'):
            return redirect('error_page')  # エラーURLで置き換える
        
        # アクセストークンとリフレッシュトークンと交換する承認コード
        token_url = "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer"
        payload = {
            'grant_type': 'authorization_code',
            'code': auth_code,
            'redirect_uri': settings.QB_REDIRECT_URI,
            'client_id': settings.QB_CLIENT_ID,
            'client_secret': settings.QB_CLIENT_SECRET,
        }
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        response = requests.post(token_url, data=payload, headers=headers)
        
        if response.status_code == 200:
            tokens = response.json()
            # トークンを安全に保存する(セッションまたはデータベースなど)
            request.session['access_token'] = tokens['access_token']
            request.session['refresh_token'] = tokens['refresh_token']
            request.session['realm_id'] = realm_id
            
            # QuickBooksクライアントを初期化する
            client = QuickBooks(
                sandbox=True,
                consumer_key=settings.QB_CLIENT_ID,
                consumer_secret=settings.QB_CLIENT_SECRET,
                access_token=tokens['access_token'],
                access_token_secret=tokens.get('access_token_secret', ''),
                company_id=realm_id
            )
            # クライアントを保存するか、API呼び出しを続行する
            request.session['qb_client'] = client  # オプション:シリアライズされたクライアントを保存
        
        return redirect('success_page')  # 成功URLで置き換える

 

settings.py

 

QB_CLIENT_ID = 'your_client_id'
QB_CLIENT_SECRET = 'your_client_secret'
QB_REDIRECT_URI = 'http://localhost:8000/callback/'  # QuickBooksアプリと一致させる

 

urls.py

 

from django.urls import path
from .views import QuickBooksAuthView, QuickBooksCallbackView

urlpatterns = [
    path('auth/', QuickBooksAuthView.as_view(), name='qb_auth'),
    path('callback/', QuickBooksCallbackView.as_view(), name='qb_callback'),
]

 

Step 4: QuickBooksとデータを同期する


認証が成功したら、Djangoアプリは顧客、請求書、支払いなど、QuickBooksとデータを交換できるようになります。この手順では、アプリのデータベースとQuickBooksのAPI間のシームレスなフローを作成します。同期するデータを表すDjangoモデル(CustomerモデルやInvoiceモデルなど)を定義することから始めます。次に、ローカルデータをQuickBooksにプッシュしたり、QuickBooksからアプリに更新を取得したりする操作を処理するビューを作成します。たとえば、ユーザーがフォームを送信したときに新しい請求書を送信するビュー、またはダッシュボードに顧客のリストを表示するために顧客のリストを取得するビューを作成できます。python-quickbooksライブラリは、QuickBooksオブジェクトを直接操作できるため、両システム間でデータの一貫性を確保します。

 

Step 5: テストとデプロイ


統合を開始する前に、厳格なテストが不可欠です。ライブデータに影響を与えることなく現実世界のシナリオをシミュレートするために、QuickBooksのサンドボックス環境を使用します。レコードの作成、更新、取得をテストして、すべてが期待通りに機能することを確認します。アクセストークンの期限切れ(更新が必要)やAPIレート制限(再試行ロジックが必要)などの極端なケースに特に注意してください。ビューにエラー処理を追加して、これらの問題を適切に管理し、何かが失敗した場合にユーザーに明確なフィードバックを提供します。テストが完了して安定したら、アプリを本番環境にデプロイし、資格情報とリダイレクトURIがライブQuickBooksアプリの設定と一致することを確認します。

 

結論


QuickBooksをDjangoと統合することで、財務自動化の可能性が広がります。これらの手順に従うことで、WebアプリとQuickBooks間のシームレスな接続を作成し、時間と精度の向上を実現できます。コードを調整して、特定のユースケースに合わせてください!

Tag list:
- QuickBooks API tutorial
- QuickBooks Django Integration
- Integrate QuickBooks Online Django
- Django financial integration
- QuickBooks OAuth Django
- QuickBooks Python integration
- Django QuickBooks API
- QuickBooks Django setup
- Automate Accounting Django
- python-quickbooks Django

Subscribe

Subscribe to our newsletter and never miss out lastest news.