注文連携の仕組み

マルチロケーション環境でのWebhookからNextEngineへの注文データ転送

注文連携WebhookNextEngineマルチロケーションCSV変換
読了時間: 10分

背景

ShopifyとNextEngineの標準連携では、注文が入ると自動的にNextEngineへデータが転送されます。しかし、Shopifyに複数のロケーション(倉庫)を設定すると、この標準連携が動作しなくなります。

本記事では、マルチロケーション環境でも注文連携を維持するために構築した仕組みを解説します。

なぜ独自実装が必要なのか

標準連携が使えなくなる理由は、ShopifyのNextEngine連携アプリが単一ロケーションを前提に設計されているためです。

標準連携(単一ロケーション)
Shopify

注文発生

NextEngine連携アプリ

マルチロケーションで動作しなくなる

NextEngine

受注登録

本システム(マルチロケーション対応)
Shopify

注文発生

Webhook
本アプリ

マルチロケーションでも動作

API
NextEngine

受注登録

注文転送の仕組み

Webhookによるリアルタイム受信

Shopifyには「Webhook」という仕組みがあり、注文が発生した瞬間に外部サーバーへ通知を送ることができます。本システムでは、この Webhook を受信して NextEngine への転送処理を行います。

標準連携と同様に、お客様が購入ボタンを押すとリアルタイムでNextEngineに注文情報が届きます。

重複注文の防止

Webhookは、ネットワークの一時的な不具合などで同じデータが複数回送信されることがあります。標準連携ではこの重複処理が内部で行われていましたが、独自実装では自分で対策する必要があります。

各注文に固有のIDを付与し、すでに登録済みかどうかをチェックする仕組みを導入しました。たとえ同じデータが何度送られてきても、一度しか登録されません。

特殊注文の自動フィルタリング

すべての注文をそのまま転送すればよいわけではありません。後払いや請求書払いの注文は、与信審査の結果を待ってから処理する必要があります。

これらの特殊な決済方法の注文を自動的に識別し、通常のフローから除外する機能を実装しました。

データフローの全体像

注文処理フロー
Webhook受信

Shopifyから注文発生時にデータ受信

署名検証

なりすまし防止のため署名を確認

注文検証

下書き・後払い注文を除外

重複チェック

処理中・完了済みの注文を確認

CSV変換

41カラムのCSV形式に変換

APIアップロード

NextEngine APIへ送信

ログ記録

処理結果を記録

処理の詳細

署名検証の仕組み

Shopifyから送られるWebhookデータには「署名」が付与されています。これは、事前に共有した秘密鍵を使って生成されるものです。

連携アプリ側でこの署名を検証することで、第三者によるなりすましデータを確実に排除できます。署名が一致しないデータは、処理せずに拒否されます。

重複防止の判定ロジック

同じ注文が複数回送信された場合の処理フローは以下のとおりです:

重複判定フロー
注文番号で検索

受信した注文の番号をチェック

ステータス確認

処理状態を判定

処理中あり
スキップ(完了待ち)
完了済みあり
スキップ(二重登録防止)
該当なし
新規処理を開始

フィルタリング条件

通常のフローから除外される注文は以下のとおりです:

下書き注文
判定方法draft フラグ
理由未確定の注文は転送しない
後払い注文
判定方法"net30" タグ
理由与信審査後に個別対応

CSV変換で扱うデータ項目

NextEngine APIへのアップロードには、所定のCSV形式が必要です。注文データは41項目を含むCSV形式に変換されます。

注文情報

  • 店舗伝票番号、受注日、支払方法、発送方法

金額情報

  • 商品計、税金、発送料、手数料、ポイント、合計金額

顧客情報

  • 郵便番号、住所、氏名、電話番号、メールアドレス

配送先情報

  • 郵便番号、住所、氏名、電話番号

商品情報

  • 商品名、商品コード、価格、数量、オプション

その他

  • ギフトフラグ、時間帯指定、日付指定、備考

データ変換で工夫したポイント

タイムゾーン変換

Shopifyの時刻はUTC(協定世界時)で記録されています。これを日本時間(JST)に自動変換することで、NextEngine側で正しい受注日時が表示されるようにしました。

住所の結合

Shopifyでは住所が「都道府県」「市区町村」「番地」と分かれて保存されています。NextEngineの形式に合わせて、これらを適切に結合しています。

電話番号の正規化

お客様が入力した電話番号には、ハイフンや括弧が含まれていることがあります。これらを除去し、統一形式に変換しています。

支払方法のマッピング

Shopifyの決済名(例:「クレジットカード」「代金引換」)を、NextEngineの区分コードに変換しています。新しい決済方法が追加された場合も、マッピングテーブルを更新するだけで対応できます。

標準連携との違い

マルチロケーション
標準連携× 動作しない
本システム○ 動作する
重複防止
標準連携内部処理
本システム明示的に実装
フィルタリング
標準連携限定的
本システムカスタマイズ可能
データ形式
標準連携固定
本システム要件に応じて調整可能
ログ
標準連携確認困難
本システム詳細に記録

注意点

与信審査が必要な注文

後払いや請求書払いの注文は、自動連携の対象外となります。これらは与信審査の結果を確認してから、手動で処理するか、別途専用のフローで対応します。

ネットワーク障害時

一時的なネットワーク障害でWebhookが届かない場合があります。このような場合に備えて、定期的にShopifyの注文一覧と突合する仕組みを別途用意しておくと安心です。

まとめ

マルチロケーション環境では標準連携が使えなくなりますが、Webhook と NextEngine API を活用することで、同等の自動連携を実現できます。

独自実装のメリットとして、フィルタリング条件やデータ形式を自由にカスタマイズできる点があります。ビジネス要件に合わせた柔軟な連携が可能になりました。

関連記事