@boelabs/billete-sdk

中文文档
10.0.0发布于 2026/11/10MITTypeScriptES Module零依赖近 30 天下载 2666

Billete SDK:服务器客户端,浏览器客户端和webhook验证

中文使用文档
文档目录13 节
  1. 康特尼多语Name
  2. 起义组织
  3. 伊尼西奥·拉皮多
  4. 配置
  5. 递归
  6. Ejemplo:计划配额
  7. 蒙托斯语Name
  8. 帕吉纳西翁
  9. 错误
  10. 《同上》和《刑法》
  11. 纳维加多尔
  12. 网络呼号
  13. 诉讼

比尔特 SDK

(原始内容存档于2019-03-26) (英语). SDK official de TypeScript para la API de 比尔特。 。 。 .

经济、社会、文化权利委员会 侍从和前端.

npm Licencia: MIT Tipos incluidos Sin dependencias


  • Tipado de punta a punta: 一个双关语: {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}cada recordso, entrada and evento tinne su tipo. {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢.
  • 依赖性: 独奏 fetch y Web Crypto; funciona en Node.js 20+, Bun, Deno y 跑道边缘(Cloudflare Workers, Vercel). 国家客户端 (原始内容存档于2018-10-21). Independent y Expo.
  • Seguro ante retentos: (原始内容存档于2018-06-26) (英语) cada mutación leva una clave de idempotencia, así un retento 维基语录链接:名人名言 - 文学作品 - 谚语 - 谚语 - 谚语 - 谚语 尼尼卡眼镜蛇做的蔬菜.

康特尼多语Name

起义组织

npm install @boelabs/billete-sdk

Cada versión del SDK habla una versión de la API, la que pide su opción apiVersion页:1 (原始内容存档于2018-10-21). versión Covernor del SDK es una versión nueva de la API. as versions beta de la API tynen su (英语) SDK en 软件 @boelabs/billete-sdk@beta。 。 。 .

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}嗯..

导入我们第 14 条
@boelabs/billete-sdk塞尔维多托达·拉·API 密秘
@boelabs/billete-sdk/client纳维加多尔检查 y estado de un cliente, sin clave secreta
@boelabs/billete-sdk/webhooks塞尔维多维基百科

伊尼西奥·拉皮多

仪表板上的 Crea una clave secreta (中文(简体) )发展者 —— Claves API和瓜达拉岛 BILLETE_API_KEY。 。 。 .

import { createBillete } from "@boelabs/billete-sdk";

const billete = createBillete({ apiVersion: "2026-11-10", environment: "test" });

const checkout = await billete.checkouts.create({
  plan: "plan_…",
  months: 1,
  customer: { email: "[email protected]", externalId: "user_123" },
  // {CHECKOUT_ID} se reemplaza por el ID del checkout.
  successUrl: "https://tuapp.com/gracias?checkout={CHECKOUT_ID}",
  cancelUrl: "https://tuapp.com/planes",
});

// Redirige a tu cliente a checkout.url para que pague.

Billete te avisa con el webhook 互联网档案馆的存檔,存档日期2013-12-02 checkout.completed (减) 网络呼号) (中文(简体) ).

(原始内容存档于2018-03-26) (英语). Los Productos físicos habilitan sus formas de Entega con fulfillmentMethods,以ejemplo为单位 ["pickup", "shipping"]{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我就是个叛逃者 卡达·梅托多·塔姆比昂 (原始内容存档于2018-09-21). en la Configuración del negocio. (原始内容存档于2018-03-26) (英语). Deactivarlo conserva la selección de los producos. 埃尔离职 ("Acordar con el negocio" Cuando los productos físicos tynen métodos habilitados y activos ) (中文(简体) ) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}请说一下 Sin Entrega 适应能力,无 exige datos para Enregarla; respeta los que el enlace 恳求前发. (原始内容存档于2018-09-29) (英语). En Carritos, solo ofrece los demás métodos que todos los productos físicos admitan.

配置

const billete = createBillete({
  apiVersion: "2026-11-10",
  environment: "production",
  apiKey: process.env.BILLETE_API_KEY,
  timeoutMs: 30_000,
  maxRetries: 2,
});
缩略语叛变者德克赖普西翁
environment——(义务)"test" 欧 "production"德比·钱德斯迪尔·克拉夫.
apiKeyBILLETE_API_KEY奴隶秘密: sk_test_… 欧 sk_prod_…。 。 。 .
baseUrlBILLETE_BASE_URL,则 https://api.billete.runURL de la API. 互联网档案馆的存檔,存档日期2013-12-02.
timeoutMs30000(原始内容存档于2013-10-12). Tiempo máximo por intento.
maxRetries2(原始内容存档于2018-06-26) (英语). Reintentos ante errors de red, 429 尔 5xx。 。 。 .
fetchglobalThis.fetch执行 fetch 丙子(代用,试验用.

对 environment 没有巧合的con el prefijo de la clave, createBillete lanza 未出错: una (原始内容存档于2018-10-21) (英语). Clave de prueba nunica opera en producción ni al revés. Por la misma razón, 服务客户 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}她是个无名小卒.

[尖叫声] {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}那又怎样? 萨拉独奏: 服务与修女 (原始内容存档于2018-03-21). incluyas en código que legue al navegador.

递归

托多斯·梅多斯·德韦尔文·波多斯(英语:Todos los métodos deduelven promesas con el Crectorso tipado)是法国的一位女演员. Los Contresos con listado tinnen( Listado synnen) 重複相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通 create, (中文(简体) ), retrieve, (中文(简体) ), update, (中文(简体) ), list 电子 iterate, propias 广告:

重现检察官
customers—— 说
customerSessionscreate
portalSessionscreate (lace al portal del cliente, válido 60 minutos) (法语)
productsdelete, (中文(简体) ), deleteVariant
plansdelete
featuresdelete, (中文(简体) ), check, (中文(简体) ), isEnabled, (中文(简体) ), listForCustomer, (中文(简体) ), consume, (中文(简体) ), release, (中文(简体) ), set
couponsdelete
checkoutsexpire
paymentLinksdelete
invoicesvoid (合作:革新与合作,促进平等) url(中文(简体) )
subscriptionscancel, (中文(简体) ), resume
paymentsrefund, (中文(简体) ), listRefunds
fulfillmentsdeliver, (中文(简体) ), submitTracking (原始内容存档于2013-10-29). entertainment de producos físicos; también retrieve, (中文(简体) ), list 电子 iterate(中文(简体) )
webhookEndpointsdelete
eventsretrieve, (中文(简体) ), list, (中文(简体) ), iterate
exchangeRateslist
currencieslist

Ejemplo:计划配额

await billete.features.create({
  key: "tokens",
  name: "Tokens",
  type: "metered",
  unit: "tokens",
  reset: { every: "billing" },
});

const plan = await billete.plans.create({
  name: "Pro",
  currency: "USD",
  prices: [
    { months: 1, amount: 1_000 },
    { months: 12, amount: 10_000 },
  ],
  features: { tokens: 100_000 },
});

// `customer` acepta el ID de Billete (cus_…) o tu propio externalId.
const { allowed } = await billete.features.consume("user_123", "tokens", 850);

consume as atómico: si el concumo supera el límite, no se descuenta nada y 互联网档案馆的存檔,存档日期2013-12-04 allowed 对 false。 。 。 .

蒙托斯语Name

洛斯·蒙托斯·西姆普雷 单身母亲 (céntimos), 二等分数: 1_000 内 USD 儿子 10 00美元 y 1_000 内 VES 儿子10,00 Bs. Las tasas de Cambio legan como texto 小数段 绝对不会.

帕吉纳西翁

list 维吾尔活佛(página){ data, nextCursor }(三); iterate 转接:

const page = await billete.payments.list({ limit: 50 });
const next = await billete.payments.list({ limit: 50, cursor: page.nextCursor ?? undefined });

for await (const payment of billete.payments.iterate()) {
  console.log(payment.id, payment.amount);
}

托达·利克塔(英语:Toda lista acepta un rango de creación) 维基语录链接:名人名言 - 文学作品 - 谚语 - 电影对白 - 主题 - 主题 - 主题createdFrom, (中文(简体) ), createdTo, ISO 8601, 包含) y, dode 丝妮·森地多, search: los pagos y los cobros por su cliente, los producos y planes por nombre, (英语:los producos y planes por nombre, 译作"los productos"),"los producos y planes por nombre","los producos y por nombre","los producos","los productos","los pro, {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}哦.

const october = await billete.payments.list({
  status: "succeeded",
  search: "[email protected]",
  createdFrom: "2026-10-01T04:00:00Z",
  createdTo: "2026-11-01T03:59:59Z",
});

错误

托达·斯佩斯塔·法利达·兰扎·恩扎 BilleteError数字 :

import { BilleteError } from "@boelabs/billete-sdk";

try {
  await billete.payments.refund("pay_…");
} catch (error) {
  if (error instanceof BilleteError && error.code === "payment_not_refundable") {
    // …
  }
  throw error;
}
辩护人德克赖普西翁
type分类 : invalid_request, (中文(简体) ), authentication, (中文(简体) ), permission, (中文(简体) ), not_found, (中文(简体) ), conflict, (中文(简体) ), validation, (中文(简体) ), rate_limit, (中文(简体) ), provider, (中文(简体) ), internal 欧 network。 。 。 .
codeCódigo Estabable, 《关于公民的公约》: uno del 目录 (单位:千美元)BilleteErrorCode页:1 network_error 编号 : invalid_response 德尔SDK.
messageDescripción 可辨别出错 .
status科迪戈·哈特克(Código HTTP)0 斯普斯塔先生,请不要这样.
param(原始内容存档于2018-10-21). Campo que causó el error, cuando aplica.
requestId(原始内容存档于2018-06-29) (英语). Identificador de la peticion; incluyelo al pedir soporte.

《同上》和《刑法》

卡达·桑维多尔·恩维乌纳 Idempotency-Key generrada 自动化, 等于 mantiene entre 重新开始。 {\fn华文楷体\fs16\1cHE0E0E0}海平面图 {\fn华文楷体\fs16\1cHE0E0E0}海平面图 圆顶:

await billete.payments.refund("pay_…", {}, { idempotencyKey: `refund-${orderId}` });

Todos los métodos aceptan como último 论战 { idempotencyKey?, signal? }· ; signal 许可 取消 la pieción con un AbortController。 。 。 .

纳维加多尔

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我们是秘密的客户 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我们是秘密的 Tu 服务器 crea una 客户关系 前端:

// Servidor
const session = await billete.customerSessions.create({ customer: "user_123" });
return { token: session.token };
// Navegador
import { createClient } from "@boelabs/billete-sdk/client";

const billete = createClient({ apiVersion: "2026-11-10", customerSession: token });

const { data: subscriptions } = await billete.customer.subscriptions();
const tokens = await billete.customer.feature("tokens");

无法解释

const portal = await billete.portalSessions.create({
  customer: "user_123",
  returnUrl: "https://tuapp.com/cuenta",
});
// Redirige a portal.url: allí ve sus suscripciones y cobros, cambia su ciclo o cancela.

customerSession {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}También acepta una función, {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}还有... (原始内容存档于2018-06-26) (英语). Sin sesión, el 客户端 puede leer y pagar 检查, cobros y 链接 de pago, y 咨询 tasas y monedas.

纳维加多尔的委托人 fetch, (中文(简体) ), AbortController 尔 setTimeout, así que funciona (法语) egual en React Independent y Expo, sin polyfuls. (原始内容存档于2018-09-29) (英语). 没有环境 Idempotency-Key维基月球在线解说-克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克多克 /v1/client ya rechaza su repetición por el estado de lo que cambia (不检查 con un pago en) 互联网档案馆的存檔,存档日期2013-12-21 回应 payment_in_progress{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}这才是我们所要做的.

校对:Soup waitForChange 回答 en cuanto el checkout cambia, o el mismo checkout si en 25 segundos no , 请回答 : 帕索纳达.

const next = await billete.checkouts.waitForChange(checkout);

网络呼号

Billete firma los webhoks con(英语:Billete firma los webhoks con) 互联网档案馆的存檔,存档日期2013-12-02 标准网络呼号. 维基百科 硬币 准确性 como legó中,角数为:

import { verifyWebhook, WebhookVerificationError } from "@boelabs/billete-sdk/webhooks";

export async function POST(request: Request) {
  try {
    const event = await verifyWebhook({
      payload: await request.text(),
      headers: request.headers,
      secret: process.env.BILLETE_WEBHOOK_SECRET!,
    });

    if (event.type === "checkout.completed") {
      // event.data es un Checkout
    }
    return new Response(null, { status: 204 });
  } catch (error) {
    if (error instanceof WebhookVerificationError) return new Response(null, { status: 400 });
    throw error;
  }
}

event 单人歧视 type{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}我很高兴见到你 event.data 平分线 拉玛。 雷查赞·拉斯·康马斯·德·5分toleranceSeconds) (中文(简体) ).

诉讼

麻省理工学院

版本与发布记录

@boelabs/billete-sdk 共发布 34 个版本,首次发布于 2026/09/29;过去 12 个月发布了 34 个版本。

版本发布日期距今
10.0.0latest2026/11/10今天
10.0.0-beta.2beta2026/11/091 天前
10.0.0-beta.12026/11/073 天前
9.2.02026/11/064 天前
9.1.02026/11/046 天前
9.0.02026/10/2417 天前

关于 @boelabs/billete-sdk 的常见问题

@boelabs/billete-sdk 是什么?

Billete SDK:服务器客户端,浏览器客户端和webhook验证

如何安装 @boelabs/billete-sdk?

在项目目录运行 npm install @boelabs/billete-sdk,或使用 pnpm add / yarn add / bun add。

@boelabs/billete-sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@boelabs/billete-sdk 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@boelabs/billete-sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@boelabs/billete-sdk 可以商用吗?

@boelabs/billete-sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@boelabs/billete-sdk 的下载量有多少?

根据 npm 官方下载统计,@boelabs/billete-sdk 在 2026/10/09 – 2026/11/07 这 30 天内被下载 2,666 次,日均约 89 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@boelabs/billete-sdk 还在维护吗?

最新版本 10.0.0 发布于 2026/11/10(今天);至今共发布 34 个版本,其中过去 12 个月发布了 34 个;首次发布于 2026/09/29。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。