ドキュメントPaddle

03 · 売上

Paddle を接続し、売上を訪問に紐づける

Tally は、読み取り専用のキーで Paddle Billing の取引、返金、チャージバックを読み取ります。

01Paddle を接続する

  1. Paddle で API キーを作成する

    Tally が行うのは取引の読み取りだけで、お金を動かす必要はありません。API キーは許可したことしかできず、いつでも無効にできます。Paddle で Developer tools, Authentication を開き、「New API key」を選んで、次の権限を付けます。

    権限アクセス用途
    Transaction読み取りすべての支払い:金額、税額、発生元、カスタムデータ。
    Adjustment読み取り返金とチャージバック。
    Customer読み取りtally('identify') と照合するための顧客のメールアドレス(すぐにハッシュ化し、保存はしません)。
    Notification setting書き込みTally が専用の通知先を追加するので、支払いは数秒で届きます。

    ほかの権限はすべてオフのままにします。まず試す場合は、sandbox-vendors.paddle.com のサンドボックスのキーを使ってください。

  2. API キーを貼り付ける

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

    • API key:pdl_live_apikey_(サンドボックスでは pdl_sdbx_apikey_)で始まります。Tally は暗号化して保管し、二度と表示しません。

    続いて Connect Paddle を押します。

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

    キーに足りない権限があればその名前を示し、新しい決済を発生と同時に受け取れるよう専用の通知先を追加して、返金とチャージバックを含む過去 365 日分を取り込みます。

02customData で訪問者 ID を渡す

Paddle.js でチェックアウトを開く箇所で _tally_vid Cookie を読み取り、customData に tally_visitor_id として渡します。Paddle はこれを取引に保持してサブスクリプションにもコピーするため、更新分にも引き継がれます。サーバーで作成する取引では、custom_data に入れます。

コードを表示

// Where you open the checkout (Paddle.js, after Paddle.Initialize).
const visitorId = (document.cookie.match(/(?:^|; )_tally_vid=([\w-]+)/) || [])[1];
Paddle.Checkout.open({
  items: [{ priceId: 'pri_123', quantity: 1 }],
  // customData needs at least one key, so it is left out without a visitor id.
  ...(visitorId ? { customData: { 'tally_visitor_id': visitorId } } : {}),
});

// Express with cookie-parser: a transaction your server creates for the checkout.
app.post('/checkout', async (req, res) => {
  const visitorId = req.cookies['_tally_vid'];
  const response = await fetch('https://api.paddle.com/transactions', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer ' + process.env.PADDLE_API_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      items: [{ price_id: 'pri_123', quantity: 1 }],
      custom_data: visitorId ? { 'tally_visitor_id': visitorId } : null,
    }),
  });
  const { data } = await response.json();
  // On the page: Paddle.Checkout.open({ transactionId: data.id }).
  res.json({ transactionId: data.id });
});

03Cookie なしのサイトの場合

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

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

05読み取らないもの

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