Shopifyの不正注文対策ガイド:決済前に注文をブロックするルールのつくり方
限定商品を扱うストアでは、発売と同時に転売目的の注文が殺到することがあります。いたずらの架空注文、身に覚えのないメールアドレスでの注文、卸価格への一般流入。どれも放置すると、在庫と信用を静かに削っていきます。
実害は「代金が回収できない」だけではありません。転売目的に買われた限定商品は、本来の顧客の手に届きません。届いた後に行き違いがわかれば、クレーム対応と再発送で、発送やサポートの工数が膨らみます。決済後にキャンセルしても、決済手数料だけは手元に残ります。小さなストアほど、この積み重ねは効きます。
不正注文への対応は、後から消すのではなく、はじめから通させない側に置く。この記事では、Shopifyのチェックアウトの段階で注文を止めるルールのつくり方を、対策アプリをつくった本人が整理します。
不正注文の代表的な4パターン
対策の前に、何を防ぐのかを区別しておきます。ストアによって頻度は違いますが、よくあるのはこの4つです。
ひとつめは、転売目的の大量注文です。限定コラボ商品や人気商品が、発売直後に買い占められるパターンです。買付け側は複数のアカウントや住所を使い分けることもあり、正規の顧客が買えない状態が続けば、ストアへの信頼そのものが削れます。対処の中心は数量の上限で、この考え方については購入数制限の記事で別途詳しく書きました。
ふたつめは、いたずら・嫌がらせの架空注文です。実在しない宛先や、身に覚えのない内容の注文で、発送してはじめて気づくタイプです。返品や再発送の工数と送料がそのまま損失になります。悪質な場合は同一人物からの反復になることもあり、代金引換のストアでは受け取り拒否の問題につながります。
みっつめは、不正なメールアドレスでの注文です。使い捨てのメールドメインを使った注文は、後からの案内が届かず、キャンセルや確認のやり取りができません。メールドメインを基準に検知できるので、ルールで止めやすい部類です。
よっつめは、B2Bラインへの一般流入です。卸価格のコレクションや法人向けの販売ラインに、一般の顧客が流れ込むパターンです。価格の漏洩それ自体がダメージになり、法人顧客との約束も守れなくなります。
Shopify標準機能ではどこまで防げるか
Shopifyには不正分析(Fraud Analysis)という標準機能があります。注文が入った後にリスクの度合いを示してくれるもので、判定の材料としては確かに役立ちます。ただし、示されるのはあくまで事後のリスクスコアであり、注文そのものは止まりません。スコアが高くても、店主がキャンセルするまで注文は存在し続け、決済も完了します。キャンセルの一手間と、決済手数料も残ります。
つまり、標準機能は「怪しい注文を見つける」はできても、「怪しい注文を通さない」はできません。通させないためには、チェックアウトの途中、決済が完了する前に条件を検証して注文を止める仕組みが必要です。Shopify FunctionsのCart & Checkout Validation APIがそのための土台で、私がつくったValidify Checkout Guard(バリディファイ・チェックアウトガード)は、ここにルールを差し込む形で動く単機能のアプリです。
ルールで防ぐ考え方
設計上の柱は2つあります。
ひとつは、ブロックのみであることです。アプリの動作は「ルールに引っかかった注文を止める」だけで、警告だけ出す、フラグを立てるといった中間の動作はありません。中間の状態が増えるほど運用の見通しが悪くなるので、最初から引き算してあります。挙動が予測しやすく、管理も単純です。
もうひとつは、フェイルオープンであることです。アプリ側でエラーが起きても、チェックアウトそのものは止まりません。対策アプリの不調のせいで正規の顧客が買えなくなる、という本末転倒を避けるための設計です。
ルールのつくり方は、シンプルなルールを重ねるのが基本です。1件の巨大なルールで全パターンをカバーしようとするより、「1注文の合計数量の上限」と「顧客の注文回数」のような単機能のルールを組み合わせるほうが、効きすぎたときに理由を追いやすく、後から見直せます。使えるチェックアウト基準は36種類、演算子は18種類で、カート・顧客・ラインアイテム・配送先・B2Bの領域をカバーします。1ポリシーあたり最大25ルール、1ルールあたり最大25条件まで組み合わせられます。複数のルールに同時に引っかかった場合は、一致したルールがそれぞれ別々にエラーを出します。どこに引っかかったのかがそのまま見えるため、効きすぎたルールの見当もつけやすくなっています。
具体的なルール例
ルールはどれも「基準 + 演算子 + 値」の形で書きます。実例を3つ挙げます。
1注文の合計数量を抑えるには、基準「合計数量」+ 演算子「より大きい」+ 値 6とします。1注文の合計数量が6点を超えた時点で、チェックアウトが止まります。転売目的の買い占めに対する最初の壁として効きます。特定商品だけ絞り込む、初回顧客だけ厳しくするといった細かい設計は、購入数制限の記事で扱っています。
使い捨てメールドメインを止めるには、基準「メールドメイン」+ 演算子「正規表現に一致」+ 値として使い捨てドメインのパターンを書きます。正規表現は大文字小文字を無視し、最大200文字で、保存時にコンパイルチェックが走るため書き間違いには気づけます。正規表現を使える基準は10項目あり、メールドメインはその代表です。単純に列挙すれば足りる場合は、演算子「のいずれか」+ ドメインのリストでも同じことができます。
配送対象外の国を止めるには、基準「配送国」+ 演算子「のいずれでもない」+ 値として発送できる国を選びます。配送国の基準は249カ国のピッカーから選べます。越境ECで「この国には発送できない」ストアでは、注文を受けてから断るより、チェックアウトで止めるほうが双方に楽です。国内限定のストアなら、配送国が日本でなければブロック、の1条件で足ります。住所まわりの他のトラブル(郵便番号の形式、PO Box宛て)は住所入力の記事で扱います。
ブロックされた人に見せるメッセージ
ルールで止めるとき、何も告げずに止めるのは買う側に不親切です。チェックアウトガードでは、ブロックの理由を買物客に表示するメッセージを書けます。日本語をはじめ36言語に対応していて、買物客の言語で表示されます。メッセージは500文字まで書けます。
コツは、「何が引っかかったか」と「何を直せば買えるようになるか」を書くことです。「転売対策のため、お一人様6点までのご購入に制限しております。数量をご調整ください」のように次の一手がわかれば、正規の顧客は買い直してくれます。なお、多言語対応はこの買物客向けメッセージの範囲で、設定画面そのものは英語です。日本語で書いたメッセージがそのまま日本の買物客に表示される、という関係です。
導入のしかた
7日間の無料トライアルがあります。まずはルールを1つだけ決めて、トライアルの期間中に、ご自身のストアの注文履歴と見比べながら、効きすぎていないか、すり抜けていないかを確認するのがおすすめです。月額$5で、ルールはご自身のストアのShopifyデータの中に保存されます。ルールの組み立てに迷ったら、ShopifyのAIアシスタントSidekickに普段の言葉で起草させることもできます。「転売対策で1注文は6点までにしたい」と伝えれば、アプリのビルダーに下書きが開きます。保存は店主が確認して行う設計で、AIが勝手に設定を書き換えることはありません。設定に困ったら、日本語で24時間以内に、つくった本人が返します。アプリの詳細はこちらから確認できます。