Shopify Webhooks は、Shopify ストアで起きたイベントをリアルタイムに外部システムへ届ける仕組みだ。注文作成、決済完了、在庫変動、顧客登録といった出来事が発生した瞬間に、指定した URL へペイロードが POST される。
ポーリングとの違い
API を定期的に叩いて「変化があったか」を確認するポーリングと比べて、Webhook はイベント駆動なので無駄なリクエストが出ず、検知も即時になる。これが効くのは、受注データを基幹システムへ流し込む連携や、複数の販売チャネル間で在庫を同期する仕組みだ。注文が入った瞬間に処理が走るので、在庫の二重販売のようなトラブルを抑えやすい。
実装で必ずやること
ペイロードには HMAC 署名が付く。受信側でこの署名を検証しないと、第三者が偽のリクエストを送り込める穴になる。署名検証は省略せず必ず実装したい。受信エンドポイントは Shopify が定めた制限時間内に応答を返す必要があり、重い処理を同期的に行うとタイムアウトして配信失敗扱いになる。ペイロードはいったんキューに積み、応答だけ即座に返して実処理は非同期で回す構成が定石だ。
Webhook は配信失敗時に再送される。同じイベントが二重に届いても処理が壊れないよう、受信側を冪等に設計しておく必要がある。Webhook 連携全般に共通する基本だが、注文処理では特に重要になる。
取りこぼしへの備え
Webhook はネットワーク障害や受信側のダウンが続けば、最終的に配信を諦めることがある。「届いて当然」と考えると欠落に気づけないため、定期的に API で実データと突き合わせて差分を埋める照合バッチを併用しておくと堅牢になる。
イベントの順序を前提にしない
複数の Webhook はネットワークの都合で前後して届くことがあり、「注文作成」より先に「注文更新」を受け取る、といった逆転も起こりうる。受信側でイベントの発生時刻やバージョンを見て、古い情報で新しい状態を上書きしないようにしておくと、在庫や受注の整合性が崩れにくい。Shopify のプラン契約があれば追加料金なしで使えるため、コスト面のハードルは低く、前提条件は Shopify を使っていることそのものだ。EC のバックエンド連携を作るなら、まず受信処理の堅牢さに投資する価値が大きい。