背景
ShopifyとNextEngineの標準連携では、注文が入ると自動的にNextEngineへデータが転送されます。しかし、Shopifyに複数のロケーション(倉庫)を設定すると、この標準連携が動作しなくなります。
本記事では、マルチロケーション環境でも注文連携を維持するために構築した仕組みを解説します。
なぜ独自実装が必要なのか
標準連携が使えなくなる理由は、ShopifyのNextEngine連携アプリが単一ロケーションを前提に設計されているためです。
注文発生
マルチロケーションで動作しなくなる
受注登録
注文発生
マルチロケーションでも動作
受注登録
注文転送の仕組み
Webhookによるリアルタイム受信
Shopifyには「Webhook」という仕組みがあり、注文が発生した瞬間に外部サーバーへ通知を送ることができます。本システムでは、この Webhook を受信して NextEngine への転送処理を行います。
標準連携と同様に、お客様が購入ボタンを押すとリアルタイムでNextEngineに注文情報が届きます。
重複注文の防止
Webhookは、ネットワークの一時的な不具合などで同じデータが複数回送信されることがあります。標準連携ではこの重複処理が内部で行われていましたが、独自実装では自分で対策する必要があります。
各注文に固有のIDを付与し、すでに登録済みかどうかをチェックする仕組みを導入しました。たとえ同じデータが何度送られてきても、一度しか登録されません。
特殊注文の自動フィルタリング
すべての注文をそのまま転送すればよいわけではありません。後払いや請求書払いの注文は、与信審査の結果を待ってから処理する必要があります。
これらの特殊な決済方法の注文を自動的に識別し、通常のフローから除外する機能を実装しました。
データフローの全体像
Shopifyから注文発生時にデータ受信
なりすまし防止のため署名を確認
下書き・後払い注文を除外
処理中・完了済みの注文を確認
41カラムのCSV形式に変換
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 を活用することで、同等の自動連携を実現できます。
独自実装のメリットとして、フィルタリング条件やデータ形式を自由にカスタマイズできる点があります。ビジネス要件に合わせた柔軟な連携が可能になりました。