如何用 Stripe 自定义 Checkout 流程把客户与 Dub 关联并自动追踪 sale 事件【免费下载链接】dubThe modern link attribution platform. Loved by world-class marketing teams like Framer, Perplexity, Superhuman, Twilio, Buffer and more.项目地址: https://gitcode.com/GitHub_Trending/du/dub如果你的网站没有直接使用 Stripe 托管的 Checkout 页面而是在自己服务端调用 Stripe 的checkout.sessions.createAPI 构建自定义结账流程那么问题来了用户付款成功后如何不额外手动上报、就让 Dub 知道这单来自哪次点击Dub 的集成文档给出的方案是在创建 checkout session 时把你数据库中该用户的唯一 ID 以dubCustomerExternalId的形式放进 checkout session 的metadata字段Dub 就会自动监听 Stripe 的购买事件并把 sale 关联回用户最初点击 Dub 链接产生的 click event也就是用户来源的那条链接。适用前提你的站点使用 Stripe 的checkout.sessions.createAPI 走自定义结账流程对应 stripe-checkout 集成文档用户是通过 Dub 短链接进来的即 Dub 侧存在该用户的点击记录你的数据库中有该客户的唯一用户 ID下文示例中为user.id。Dub 在背后如何完成关联根据 stripe-checkout 文档 的说明整个链路是Dub 把用户记录为 customer并与该用户来源的 click event 建立关联当用户完成购买时Dub 自动把 checkout session 的明细发票金额、币种等关联到这个 customer进而关联回原始 click event这样 Dub 就能自动追踪 sale 事件无需你在结账成功后手动调用 track 接口。你需要做的只有一件事让 Dub 能认出这个 Stripe checkout session 对应的是哪个客户。创建 checkout session 时传入 dubCustomerExternalId在你调用stripe.checkout.sessions.create的地方把你数据库中客户的唯一用户 ID 作为dubCustomerExternalId放进metadata。文档给出的示例如下其中user对象、priceId、success_url均为文档示例值替换为你自己系统中的真实值import { stripe }对应你项目中自己的 Stripe 客户端导入import { stripe } from /lib/stripe; const user { id: user_123, email: userexample.com, teamId: team_xxxxxxxxx, }; const priceId price_xxxxxxxxx; const stripeSession await stripe.checkout.sessions.create({ customer_email: user.email, success_url: https://app.domain.com/success, line_items: [{ price: priceId, quantity: 1 }], mode: subscription, client_reference_id: user.teamId, metadata: { dubCustomerExternalId: user.id, // the unique user ID of the customer in your database }, });关键点在于metadata里的dubCustomerExternalId它必须是你在自己数据库中为客户保存的唯一 IDDub 会用它来定位已记录的 customer 并完成关联。完成这一步后当客户完成 checkout sessionDub 会自动把 checkout session 明细发票金额、币种等与该 customer 关联并进一步关联到原始 click event——sale 事件随之被记录这就是文档描述的成功结果。替代分支不走 checkout.sessions.create 时在 Stripe customer 上传 metadata如果你根本不使用 Stripe 的 checkout session 创建流程stripe-customers 文档 给出了另一条路径在 Stripe customer 的创建流程中同时传入用户唯一 ID 和 click event IDdub_id。创建 Stripe customer 时dub_id是 Dub 的 click event ID文档示例中从请求头读取请保留你项目中自己的获取方式import { stripe } from /lib/stripe; const user { id: user_123, email: userexample.com, teamId: team_xxxxxxxxx, }; const dub_id req.headers.get(dub_id); await stripe.customers.create({ email: user.email, name: user.name, metadata: { dubCustomerExternalId: user.id, dubClickId: dub_id, }, });如果 customer 已存在也可以用 Stripe customer 更新流程补传这两个值import { stripe } from /lib/stripe; const user { id: user_123, email: userexample.com, teamId: team_xxxxxxxxx, }; const dub_id req.headers.get(dub_id); await stripe.customers.update(user.id, { metadata: { dubCustomerExternalId: user.id, dubClickId: dub_id, }, });这样当客户发生购买时Dub 会自动把购买明细发票金额、币种等关联到原始 click event。验证结果与手动补充上报上述两条路径的成功条件都以文档描述的行为为准客户完成结账或发生购买后Dub 自动把 checkout session / 购买明细关联到 customer 与原始 click eventsale 事件被自动记录。如果某次成交无法走自动关联Dub 文档提供了手动上报 sale 事件的替代方式——服务端 SDK 或 REST API见 manual-track-sale 文档。TypeScript SDK 示例import { Dub } from dub; const dub new Dub({ // optional, defaults to the DUB_API_KEY environment variable token: process.env.DUB_API_KEY, }); await dub.track.sale({ customerExternalId: cus_oFUYbZYqHFR0knk0MjsMC6b0, amount: 3000, // sale amount in cents currency: usd, paymentProcessor: stripe, eventName: Invoice paid, invoiceId: INV_1234567890, });等价的 REST API 调用dub_xxxxxx需替换为你的 Dub API key金额单位为分请求体字段见 rest-api 文档 的鉴权说明const response await fetch(https://api.dub.co/track/sale, { method: POST, headers: { Authorization: Bearer dub_xxxxxx, Content-Type: application/json, }, body: JSON.stringify({ customerExternalId: cus_oFUYbZYqHFR0knk0MjsMC6b0, amount: 3000, // sale amount in cents paymentProcessor: stripe, eventName: Invoice paid, invoiceId: INV_1234567890, currency: usd, }), }); const data await response.json();手动上报时注意customerExternalId要与你在 Dub 侧记录的 customer 标识一致事件数据金额、币种、发票 ID取自本次真实成交。边界说明本文主路径对应的是“自建结账流程 checkout.sessions.create”的场景。如果你用的是 Stripe Payment Links 或 Pricing TablesDub 的接入方式不同通过client_reference_id等参数传递 click ID参见 stripe-payment-links 文档不适用于本文的metadata做法dubCustomerExternalId必须是你数据库中客户的唯一 IDDub 依据它把 Stripe 事件归到已记录的 customer 上事件明细金额、币种来自 checkout session 本身Dub 自动完成关联无需你在服务端重复解析 Stripe 事件。【免费下载链接】dubThe modern link attribution platform. Loved by world-class marketing teams like Framer, Perplexity, Superhuman, Twilio, Buffer and more.项目地址: https://gitcode.com/GitHub_Trending/du/dub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考