MENU
blog
スタッフブログ
dot
自作在庫管理システムとWooCommerceをREST APIで連携する方法
技術

自作在庫管理システムとWooCommerceをREST APIで連携する方法

はじめに

ソリューションの盛田です!
今回は初めて技術的なブログを書いてみたいと思います!
第一回はワードプレスでECを運営するためのプラグインであるWooCommerceと、
自身で開発した在庫管理システムをAPI連携する方法のお話です!

ECサイトを運営していると、商品数が増えるにつれて在庫管理の手間も増えていきます。
特に、在庫管理システムとECサイトを別々に管理している場合、在庫数の二重入力が必要になり、入力ミスや在庫数のズレが発生する原因になります。

そこで今回は、自身で開発した在庫管理システムと、WordPressで構築した自社ECサイトのWooCommerceをREST APIで連携し、在庫情報を同期できる仕組みを構築しました。

本記事では、WooCommerce REST APIを利用して外部の在庫管理システムから商品情報を取得し、在庫数を更新する基本的な方法について紹介します。

今回構築したシステムの全体像

今回の構成では、自作した在庫管理システムを在庫情報の管理元とし、WooCommerce側へ在庫情報を連携する形にしています。

在庫管理システム
        ↓
WooCommerce REST API
        ↓
WordPress / WooCommerce
        ↓
      自社EC

在庫管理システム上で商品の在庫数を変更すると、WooCommerce REST APIを利用して対象商品の在庫数を更新します。

在庫情報を複数のシステムで個別に管理すると不整合が発生しやすいため、今回は在庫管理システムをマスターとして扱い、WooCommerce側へ情報を反映する構成としました。

WooCommerce REST APIとは

WooCommerceにはREST APIが用意されており、外部のシステムからWooCommerce内のデータを取得・登録・更新することができます。

REST APIを利用することで、例えば以下のような情報を外部システムと連携できます。

  • 商品情報
  • SKU
  • 商品価格
  • 在庫数
  • 注文情報
  • 顧客情報

今回は、この中から主に「商品情報」と「在庫数」を利用しました。

WooCommerce REST APIの設定

APIキーを発行する

まず、WordPressの管理画面からWooCommerce REST APIを利用するためのAPIキーを発行します。

管理画面から以下の順番で設定画面を開きます。

WooCommerce
↓
設定
↓
高度な設定
↓
REST API

REST APIの設定画面から新しいキーを追加します。

例えば、以下のような設定を行います。

  • 説明:在庫管理システム連携
  • ユーザー:API連携用ユーザー
  • 権限:読み取り/書き込み

キーを生成すると、以下の2つの情報が発行されます。

Consumer Key
Consumer Secret

これらを外部システムからWooCommerceへアクセスする際の認証情報として利用します。

Consumer KeyやConsumer Secretはパスワードと同じように重要な情報です。
Gitなどのリポジトリへ公開したり、ソースコードへ直接記述したりせず、環境変数などを利用して管理することが重要です。

WooCommerceから商品情報を取得する

WooCommerce REST APIでは、以下のエンドポイントから商品情報を取得できます。

GET /wp-json/wc/v3/products

例えば、自社ECサイトのURLが以下だった場合、

https://example.com

商品の取得先は以下のようになります。

https://example.com/wp-json/wc/v3/products

SKUを指定して商品を検索する

在庫管理システムとWooCommerceの商品を紐付ける方法はいくつかありますが、今回はSKUを利用しています。

SKUを指定して商品を取得する場合は、以下のようにリクエストできます。

GET /wp-json/wc/v3/products?sku=ABC001

WooCommerceからはJSON形式で商品情報が返されます。

{
    "id": 123,
    "name": "商品名",
    "sku": "ABC001",
    "manage_stock": true,
    "stock_quantity": 10
}

このレスポンスから、WooCommerceの商品IDや現在の在庫数などを取得できます。

WooCommerceの在庫数を更新する

対象商品のWooCommerce商品IDが取得できれば、その商品IDを指定して商品情報を更新できます。

例えば商品IDが「123」の場合、以下のエンドポイントへ更新リクエストを送信します。

PUT /wp-json/wc/v3/products/123

送信するデータは以下のようになります。

{
    "manage_stock": true,
    "stock_quantity": 5
}

これにより、WooCommerceの商品ID「123」の在庫数を「5」に変更できます。

在庫管理システム側の処理

今回作成した在庫管理システムでは、在庫数を変更した際にWooCommerce REST APIを呼び出す処理を実装しました。

大まかな処理の流れは以下の通りです。

1. 在庫管理画面で在庫数を変更

        ↓

2. 在庫管理システムのデータベースを更新

        ↓

3. 対象商品のWooCommerce商品IDを取得

        ↓

4. WooCommerce REST APIを呼び出す

        ↓

5. WooCommerceの在庫数を更新

        ↓

6. APIのレスポンスを確認

PHPからWooCommerce APIを呼び出す例

例えばLaravelを利用している場合、HTTPクライアントを使用してWooCommerce REST APIへリクエストを送信できます。

<?php

use Illuminate\Support\Facades\Http;

$response = Http::withBasicAuth(
    config('services.woocommerce.consumer_key'),
    config('services.woocommerce.consumer_secret')
)->put(
    'https://example.com/wp-json/wc/v3/products/' . $productId,
    [
        'manage_stock' => true,
        'stock_quantity' => $stockQuantity,
    ]
);

if ($response->successful()) {
    // 在庫更新成功
} else {
    // エラー処理
}

実際のシステムでは、URLやConsumer Key、Consumer Secretなどをソースコードへ直接記述するのではなく、環境変数や設定ファイルを利用して管理します。

また、API通信に失敗した場合に備えて、レスポンス内容やエラー情報をログへ記録しておくことも重要です。

商品を紐付けるためにSKUを利用

在庫管理システムとWooCommerceを連携するうえで重要になるのが、「同じ商品をどのように判別するか」という点です。

今回のシステムではSKUを商品識別用のコードとして利用しました。

例えば、在庫管理システム側では以下のような情報を管理します。

  • 商品名
  • JANコード
  • SKU
  • 在庫数
  • WooCommerce商品ID

初回連携時にSKUを使ってWooCommerceの商品を検索し、取得したWooCommerce商品IDを在庫管理システム側へ保存しておくことで、2回目以降は商品IDを指定して直接更新できます。

在庫管理システムの商品
        ↓
       SKU
        ↓
WooCommerceの商品検索
        ↓
WooCommerce商品ID取得
        ↓
商品IDを在庫管理システムへ保存

毎回SKU検索を行うよりも、WooCommerceの商品IDを保持しておくことでAPI通信の回数を減らすことができます。

実装時に注意したポイント

API通信に失敗した場合の処理

外部APIを利用する以上、必ず通信が成功するとは限りません。

例えば、以下のような状態が発生する可能性があります。

在庫管理システム
在庫更新:成功

        ↓

WooCommerce API
在庫更新:失敗

この状態のままにすると、在庫管理システムとWooCommerceで在庫数が異なってしまいます。

そのため、実際に運用する場合は以下のような仕組みを用意しておく必要があります。

  • APIエラーのログ保存
  • 通信失敗時の再試行
  • 未同期商品の管理
  • 手動での再同期機能

SKUを重複させない

SKUを商品識別に利用する場合、複数の商品に同じSKUを設定すると正しく商品を判別できなくなる可能性があります。

そのため、在庫管理システム側とWooCommerce側でSKUが一意になるように管理する必要があります。

どのシステムを在庫情報のマスターにするか決める

今回の仕組みでは、在庫管理システムを在庫情報のマスターとしています。

在庫管理システム
        ↓
     API連携
        ↓
WooCommerce

複数のシステムから自由に在庫数を更新できる構成にすると、どの在庫数が正しいのか判断できなくなる可能性があります。

そのため、在庫情報を管理するシステムを明確に決めておくことが重要です。

API連携によって改善できたこと

API連携を行う前は、在庫管理システム側で在庫数を変更したあと、WooCommerce側でも同じ商品の在庫数を変更する必要がありました。

在庫管理システム
在庫:10個

WooCommerce
在庫:8個

このように、更新忘れや入力ミスによって在庫数にズレが発生する可能性があります。

API連携後は、在庫管理システムで在庫数を変更するだけでWooCommerce側にも反映できるようになりました。

在庫管理システム
        ↓
   REST API
        ↓
WooCommerce

今回の連携によって、以下のような改善が期待できます。

  • 在庫更新作業の削減
  • 二重入力の防止
  • 入力ミスの削減
  • 在庫情報の一元管理
  • ECサイト運営業務の効率化

今後の拡張

WooCommerce REST APIでは、在庫情報だけでなく注文情報も取得できます。

そのため、今後はWooCommerceで商品が購入された際に注文情報を在庫管理システムへ取り込み、自動的に在庫を減算する仕組みへ拡張することも可能です。

WooCommerce
     ↓
注文情報を取得
     ↓
在庫管理システム
     ↓
在庫数を更新

さらに、他のECモールや販売チャネルと連携することで、在庫管理システムを中心とした一元管理システムへ発展させることもできます。

                ┌─ WooCommerce
                │
在庫管理システム ├─ 他ECモール
                │
                ├─ 実店舗
                │
                └─ その他販売チャネル

まとめ

今回は、自身で開発した在庫管理システムとWordPressのWooCommerceをREST APIで連携し、在庫情報を同期する方法について紹介しました。

WooCommerceにはREST APIが用意されているため、外部システムから商品情報の取得や在庫数の更新を行うことができます。

在庫管理システムをマスターとしてWooCommerceと連携することで、これまで手作業で行っていた在庫更新を自動化し、二重入力や在庫数のズレを減らすことができます。

ECサイトを運営するうえで、在庫管理や受注管理などの定型作業は大きな負担になりがちです。
APIを活用して既存システムと外部サービスを連携することで、業務効率化や人的ミスの削減につなげることができます。

dot
dot
PAGETOP