ストアフロントにログイン済みのお客様
ログイン済みのお客様のみが、ストアのドメイン経由でWebhookを呼び出せるようにし、直接URLへのアクセスを無効にし、Shopify Flowで認証済みお客様IDを取得してください。
ご自身のストアフロントからWebhookを呼び出し、どのお客様が送信したかを確認できます。 卸売注文フォーム、B2Bアカウントページ上の再注文ボタン、またはログイン済みお客様向けのリクエストフォームからShopify Flowワークフローを開始することができ、そのワークフローはログイン中のお客様のIDを受け取ります。ShopifyはそのIDに署名を行うため、他のお客様になりすますことはできません。
これはアプリプロキシのURLに基づいています。CORS、アプリのプロキシURL、およびブラウザからの呼び出し をご覧ください。
設定してください
- Webhookを開き、「**詳細設定」**に進んでください。
- 「URL設定」で、**「アプリのプロキシURLを使用する」**をオンにしてください。これで、WebhookのURLはストアのドメイン上に配置されるようになります(例:
https://your-store.com/apps/webhooks/abc123)。 - 「このWebhookを呼び出せるのは誰か」で、次の3つの選択肢から1つを選んでください:
| オプション | アプリのプロキシURL | アプリの直接URL |
|---|---|---|
| そのURLをお持ちの方ならどなたでも | どなたにも適しています | 作品 |
| 貴店のドメインを通じてのみ | どなたでもご利用いただけます。ゲストの方も含まれます。 | 403エラーにより拒否されました |
| 貴店のストアにログインしているお客様のみ | ログイン済みのお客様には正常に動作しますが、ゲストの場合は401エラーが発生します。 | 403エラーで拒否されました |
- 「保存」をクリックしてください。この設定は、次のリクエストから適用されます。

アプリが確認する内容
アプリのプロキシURLを経由するすべてのリクエストには、Shopifyからの署名が含まれています。アプリは、以下の順序で検証を行います:
- **署名です。**有効なShopify署名が含まれていないリクエストは、401エラーで拒否されます。Shopifyはアプリのシークレットを使用して署名を作成するため、これを偽造することは誰にもできません。
- **お客様のストアです。**別のストア宛てに署名されたリクエストは、403エラーで拒否されます。
- ログイン済みのお客様。_ストアにログイン済みのお客様のみ_を対象とする場合、ログイン済みのお客様を指定しないリクエストは、401(
customer_login_required)で拒否されます。お客様IDは署名から取得され、リクエスト本文からは決して取得されません。 - **直接のURLです。**どちらの制限が適用されていても、アプリへの直接URLには403(
proxy_required)が返されるため、これらのチェックを回避することはできません。
拒否されたリクエストはShopify Flowに届くことはなく、プランの集計対象にもなりません。
Shopify Flowが受け取るもの
「Webhookトリガー」および「Sync Webhookトリガー」には、**customerId**というフィールドがあります。これは、ログイン中の顧客の数値IDであり、例えば7350001といった値になります。ゲストの場合、およびアプリプロキシURLを経由していないリクエストの場合は、このフィールドは空になります。マッピングされたフィールドは通常通り受け取られます。詳細はペイロードのマッピングとShopify Flow変数をご参照ください。
ストアフロントから電話をかけてください
このリクエストは、お客様がログインしている状態で、貴店のページから送信される必要があります。そうすることで、貴店のドメインを経由して処理されるようになります。アプリからWebhookのURLをコピーしてください:Shopifyではプロキシパスを変更できるため、実際のURLは例と異なる場合があります。テーマのセクションにこのスニペットを記述すると、B2B顧客が購入先として指定した会社のロケーションが送信されます:
<script>
fetch('/apps/webhooks/abc123', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
companyLocationId: 'gid://shopify/CompanyLocation/{{ customer.current_location.id }}'
})
})
</script>フィールド 1 を companyLocationId にマッピングし、ワークフローがロケーションを fieldOne として受け取れるようにしてください。
Shopify Flowでお客様のチェックインを行ってください
Shopify Flowはお客様に関するあらゆる情報を読み取ることができるため、この確認作業はワークフローに組み込む必要があります:
- トリガー:「Workflow Webhooks」のWebhookトリガーです。Webhookが複数ある場合は、次の条件を追加してください:「Webhook IDがアプリに表示されているIDと一致する」。
id:{{customerId}}というクエリでお客様データを取得します。Shopify Flow は、タグや会社の役割を含め、ログイン中のお客様のデータを読み込みます。- **条件:**お客様に
wholesaleタグが付与されており、そのお客様の会社連絡先プロファイルのいずれかに、会社所在地IDがfieldOneと一致し、かつ役割がOrdering onlyまたはLocation adminである役割の割り当てがあること。 - **その場合:**そのロケーション向けの下書き注文を作成するなど、必要な処理を行ってください。**そうでない場合:**処理を中止するか、同期応答 を使用してストアフロントに応答し、ページがお客様にその理由を説明できるようにしてください。
知っておくと便利です
- アプリのプロキシURLを利用するには、ストアフロントにアクセスできる必要があります。パスワードで保護されたストアの場合、ストアフロントのパスワードを入力して初めて応答します。
- ゲストには401エラーが表示されますので、そのページにログイン用のリンクを表示してください。
- 「履歴」には各リクエストの顧客IDが表示され、「再送信」を行うと、そのリクエストが再度送信されます。
- お客様からデータの削除を依頼された場合、そのお客様が送信した履歴の記録は削除されます。
