Lemon SqueezyをShopify Flowに接続する方法

Lemon Squeezyでは、デジタル商品やサブスクリプションを販売しており、注文、サブスクリプション、ライセンスの変更ごとに通知が届きます。Workflow Webhooksはこの通知をShopify Flowのトリガーに変換するため、ストア側でそれに応じて対応することができます。具体的には、顧客へのタグ付け、注文メモの追加、社内メールの送信、メタフィールドの更新など、Shopify Flowで可能なあらゆる操作が行えます。

このガイドでは、Lemon Squeezyが送信し、Workflow Webhooksが受信・検証し、Shopify Flowが処理を行うという一連の流れをすべて設定します。すべてのリクエストにおいてLemon SqueezyのHMAC署名が検証されるため、Lemon Squeezy以外ではワークフローを開始することはできません。

どのようなものを作れるか

  • デジタル製品も購入されたShopifyのお客様にタグを付け、バンドルとセグメントが一致するようにしてください。
  • 有効なライセンス階層を、メタフィールドとしてお客様レコードに記録してください。
  • 最近Shopifyで注文したお客様がサブスクリプションを解約した際は、チームにメールでお知らせください。

送信される代表的なイベントは以下の通りです:order_created、subscription_created、subscription_cancelled、license_key_created。

始める前に

  • Workflow Webhooks Shopifyストアにインストールされています。
  • Shopify Flow インストール済みです。これは、ShopifyのApp Storeから無料で入手できます。
  • Lemon Squeezy上のアカウントで、Webhookを作成する権限が付与されているもの。

ステップ 1 - Workflow Webhooks で Webhook を作成します

  1. Workflow Webhooks を開き**、[Webhook] → [Create Webhook]** の順に選択し、Shopify Flow で識別しやすい名前(例:Lemon Squeezy events)を付けてください。
  2. **「認証」**で、「**HMAC」**を選択してください。
  3. 「署名プロバイダー」で「Lemon Squeezy」を選択してください。このアプリが、ヘッダー、アルゴリズム、署名付きペイロード、リプレイウィンドウを自動的に入力してくれます。これ以外に設定すべき項目はありません。
  4. 「シークレット」の欄はひとまず空のままにして、「保存」をクリックしてください。ページに表示されているWebhookのURLをコピーしてください。

その他の認証モードについては、認証 を、Shopify Flow に送信するフィールドの選択については、ペイロードのマッピングとShopify Flow変数 をご覧ください。

ステップ 2 - Lemon Squeezy にエンドポイントを追加する

Lemon Squeezyでは、**「設定」→「Webhook」**を開き、コピーしたURLを使用してWebhookを追加し、イベントを選択して、署名用シークレットを入力してください。

「レモン・スクイージー」のサインの秘訣を見つける方法

Webhookの作成時に入力した署名用秘密鍵です。

Lemon SqueezyのWebhook署名に関する公式ドキュメント()には、お客様のアカウントに適用される正確な記載内容とスクリーンショットが掲載されています。

そのシークレットを、Workflow Webhooks の Webhook の**「Secret」**フィールドに貼り付けて、保存してください。それ以降、Lemon Squeezy からのすべての配信は、Shopify Flow に到達する前に検証されるようになります。

これが何をチェックするのか

何 値
署名ヘッダー X-Signature
署名の位置 ヘッダー値全体
何が署名されたのでしょうか {body}
署名 HMAC-SHA256、16進数エンコード
タイムスタンプ この送信者には使用されていません
リプレイ防止機能 なし - この送信者はタイムスタンプに署名を行わないため、すべての有効な署名は引き続き有効です
その秘密 プレーンテキストとして使用します。送信者が表示しているとおりに、そのまま貼り付けてください。

署名付きペイロードにおいて、{body} は、バイト単位でそのままの生のリクエスト本文です。

これらのいずれかの条件を満たさないリクエストは、401 のエラーで拒否され、沿革とトラブルシューティング に記録され、ワークフローは開始されません。

ステップ3 - 「Shopify Flow」ワークフローを作成する

  1. Shopify Flow でワークフローを作成し、「Workflow Webhooks」トリガーを選択してください。
  2. 「**イベントの記録」**を押してから、Lemon Squeezyからテストイベントを送信してください(または、Workflow Webhooksの「テスト送信」機能をご利用ください)。これにより、Shopify Flowがデータの構造を学習します。
  3. 所有しているすべてのWebhookは同じShopify Flowトリガーを起動するため、このワークフローをLemon Squeezyのみに限定するには、Webhook IDを最初の条件として追加してください。IDはWebhookページに表示されています。
  4. アクションを追加してください――お客様にタグを付ける、メモを追加する、社内メールを送信する、メタフィールドを更新する。
Shopify Flow
Shopify Flowで「トリガーを選択」を選択し、「Workflow Webhooks」を開き、「Webhookトリガー」を選択してください。
Shopify Flowの条件:Webhook IDが、ある1つのWebhookのIDと一致すること
すべてのワークフローの最初のステップは、Webhook ID に基づく条件設定です。これにより、この Webhook に対してのみワークフローが実行されるようになります。
完成したワークフロー:Webhookトリガー、Webhook IDに基づく条件、そして「True」分岐で内部メールを送信します
完成したワークフローは、トリガー、Webhook ID に基づく条件分岐、そして「True」の分岐でのアクションという構成になります。

ステップ4 - エンドツーエンドでテストする

Lemon Squeezyで実際のイベントをトリガーしてください。**「Workflow Webhooks」→「History」**に、ステータスが「Success」の呼び出しが表示されるはずです。署名が正しくなければ、その理由が記載された失敗のエントリが表示されます。また、署名付きWebhookの検証 では、どのステップで失敗したかを正確に示す署名テスターについて解説されています。

「History」には、リクエストヘッダー、ペイロード、ステータス、所要時間、および識別子を含む1つの呼び出しが記録されていました。
「History」で配信されたイベント:ステータスが「Success」の場合、Shopify Flowがそれを受け入れたことを意味します。
署名が一致しません▾

順に、シークレット(最も一般的な原因:余分なスペース、または間違った環境のキー)、送信者が別のエンドポイントのシークレットを使用しているかどうか、そしてLemon Squeezyとアプリの間でボディが書き換えられているかどうかです。 署名は生のバイト列を対象としているため、JSONのフォーマットを変更するプロキシによって署名が破損してしまいます。Webhookページの署名テスターでは、署名された正確なテキストが表示されます。

どのリクエストでも401エラーが発生します▾

Webhookの認証が**「HMAC」**に設定され、「Lemon Squeezy」プロバイダーが選択されていること、シークレットが入力されていること、そしてLemon Squeezyが、アプリに表示されている通り(末尾のコードも含めて)正確にURLへ投稿していることをご確認ください。

「履歴」には何も表示されません▾

リクエストは届きませんでした。Lemon Squeezy で URL を再確認し、Lemon Squeezy 自身の配信ログで受信した応答を確認してください。「404」というエラーは、Webhook が間違っているか削除されていることを意味します。「429」というエラーは、プランの呼び出し制限を超えていることを意味します。詳細については、プランと利用方法 をご覧ください。

ワークフローが誤ったイベントに対して実行されてしまいます▾

ストア内のすべてのWebhookは、同じShopify Flowトリガーを起動します。ワークフローの最初のステップとして、Webhook IDに基づく条件を追加するか、Lemon Squeezyから送信するイベントを絞り込んでください。

関連情報