03 · 売上
Paddle を接続し、売上を訪問に紐づける
Tally は、読み取り専用のキーで Paddle Billing の取引、返金、チャージバックを読み取ります。
01Paddle を接続する
Paddle で API キーを作成する
Tally が行うのは取引の読み取りだけで、お金を動かす必要はありません。API キーは許可したことしかできず、いつでも無効にできます。Paddle で Developer tools, Authentication を開き、「New API key」を選んで、次の権限を付けます。
権限 アクセス 用途 Transaction 読み取り すべての支払い:金額、税額、発生元、カスタムデータ。 Adjustment 読み取り 返金とチャージバック。 Customer 読み取り tally('identify') と照合するための顧客のメールアドレス(すぐにハッシュ化し、保存はしません)。 Notification setting 書き込み Tally が専用の通知先を追加するので、支払いは数秒で届きます。 ほかの権限はすべてオフのままにします。まず試す場合は、sandbox-vendors.paddle.com のサンドボックスのキーを使ってください。
API キーを貼り付ける
サイトの Integrations ページ(またはサイト追加時の Payments の手順)で Paddle を開き、次を入力します。
- API key:pdl_live_apikey_(サンドボックスでは pdl_sdbx_apikey_)で始まります。Tally は暗号化して保管し、二度と表示しません。
続いて Connect Paddle を押します。
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 });
});
04うまくいったか確認する
05読み取らないもの
足りない情報や、実際の画面と違う点はありませんか? どのページかを添えて support@tallybyoutpost.com までお知らせください。