用途:在 Next.js 公开定价页或应用内升级页展示用户本地货币价格,并保持与结账实际扣费一致。这是客户端逻辑,结账本身另见 checkout-web,展示的 priceId 与 Paddle.Checkout.open() 使用的一致。
主要能力:调用 Paddle.PricePreview() 按国家返回含货币、格式与税费的正确价格;支持国家识别(默认 OTHERS 由 IP 推断、读取请求头如 x-vercel-ip-country、或让用户选择);支持月付/年付切换;处理 JPY、KRW、CLP 等零小数货币的格式化差异。formattedTotals.total 已是本地化字符串,直接使用,勿再格式化。
使用方式:安装 npm install @paddle/paddle-js,配置 NEXT_PUBLIC_PADDLE_CLIENT_TOKEN 与 NEXT_PUBLIC_PADDLE_ENV。在 constants 中定义套餐与 priceId,用自定义 hook 调用 PricePreview 得到 priceId 到格式化价格的映射,页面组件组合初始化与频率切换。若可用 Paddle MCP,可先 search 确认方法名,再 execute 调用 client.pricingPreview.preview({ items: [{ price_id: "pri_...", quantity: 1 }], address: { country_code: "US" }, currency_code: "USD" }) 做服务端验证;方法路径为 camelCase,参数与响应字段为 snake_case。
适用场景:面向多国市场的 SaaS 定价页、应用内升级界面。
限制与注意:不要对 formattedTotals.total 二次格式化;零小数货币勿除以 100;不要自行做金额计算;不要把 address.countryCode 设为 OTHERS,应省略 address;Paddle.js 初始化前价格为空需处理加载态;勿每次渲染都调用 PricePreview;勿混用沙箱与生产 priceId;建议为主要市场设置显式价格覆盖。MCP 每次 execute 上限 50 次 API 调用、30 秒超时、32KB 代码。