ドキュメントLemon Squeezy

03 · 売上

Lemon Squeezy を接続し、注文を訪問に紐づける

Tally はストアの注文とサブスクリプションの請求書を読み取り、専用の Webhook を追加します。

01Lemon Squeezy を接続する

  1. Lemon Squeezy で API キーを作成する

    Lemon Squeezy の API キーは権限を制限できないため、Tally 専用のキーを作成してください。Tally が行うのはストアの注文の読み取りと専用の Webhook の追加だけで、キーはいつでも削除できます。Lemon Squeezy で Settings, API を開き、キーを作成します。Tally がこのキーで行うのは次のことだけです。

    権限アクセス用途
    Orders読み取りすべての売上:金額、税額、返金、顧客のメールアドレス(すぐにハッシュ化し、保存はしません)。
    Subscription invoices読み取り更新とプラン変更。
    Webhooks書き込みTally がストアに専用の Webhook を追加するので、支払いは数秒で届きます。

    テストモードで作成したキーには、テストの注文しか見えません。まず試すときに使ってください。

  2. API キーを貼り付ける

    サイトの Integrations ページ(またはサイト追加時の Payments の手順)で Lemon Squeezy を開き、次を入力します。

    • API key:Tally は暗号化して保管し、二度と表示しません。
    • Store (optional):キーから複数のストアが見える場合のみ。ストアのアドレス、名前、ID のいずれか。

    続いて Connect Lemon Squeezy を押します。

  3. Tally が確認し、過去 1 年分を取り込む

    キーをストアで確認し、新しい注文を発生と同時に受け取れるよう専用の Webhook を追加して、過去 365 日分を取り込みます。Lemon Squeezy はチェックアウトのカスタムデータを Webhook でしか送らないため、取り込んだ注文は顧客のメールアドレスで紐づけます。これからの注文には訪問者 ID が付きます。

02訪問者 ID をカスタムデータとして渡す

購入リンクのあるページでは、数行のコードで、すべての Lemon Squeezy のチェックアウトリンクに _tally_vid Cookie の値を checkout[custom][tally_visitor_id] として追加します。サーバーで作成するチェックアウトでは、checkout_data.custom に入れます。

コードを表示

// On pages with Lemon Squeezy buy links: add the visitor id as custom data.
const visitorId = (document.cookie.match(/(?:^|; )_tally_vid=([\w-]+)/) || [])[1];
for (const link of document.querySelectorAll('a[href*=".lemonsqueezy.com/checkout/buy/"]')) {
  const url = new URL(link.href);
  if (visitorId && !url.searchParams.has('checkout[custom][tally_visitor_id]')) {
    url.searchParams.set('checkout[custom][tally_visitor_id]', visitorId);
    link.href = url.href;
  }
}

// Express with cookie-parser, where you create a Lemon Squeezy checkout.
app.post('/checkout', async (req, res) => {
  const visitorId = req.cookies['_tally_vid'];
  const response = await fetch('https://api.lemonsqueezy.com/v1/checkouts', {
    method: 'POST',
    headers: {
      Accept: 'application/vnd.api+json',
      'Content-Type': 'application/vnd.api+json',
      Authorization: 'Bearer ' + process.env.LEMONSQUEEZY_API_KEY,
    },
    body: JSON.stringify({
      data: {
        type: 'checkouts',
        attributes: { checkout_data: { custom: visitorId ? { 'tally_visitor_id': visitorId } : {} } },
        relationships: {
          store: { data: { type: 'stores', id: '1' } },
          variant: { data: { type: 'variants', id: '1' } },
        },
      },
    }),
  });
  const { data } = await response.json();
  res.redirect(303, data.attributes.url);
});

03Cookie なしのサイトの場合

Cookie がないと追加する ID もないため、支払いに使うメールアドレスで購入者を identify します:ゴールと identify。

04うまくいったか確認する

05読み取らないもの

足りない情報や、実際の画面と違う点はありませんか? どのページかを添えて support@tallybyoutpost.com までお知らせください。