# @boelabs/billete-sdk 中文文档

规范地址：https://npmcn.com/package/%40boelabs/billete-sdk/

版本：10\.0\.0
npm 元数据更新时间：2026-11-10T15:25:24.765Z
中文译文更新时间：2026-11-10T16:25:32.729Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40boelabs/billete-sdk
原文对照：https://npmcn.com/package/%40boelabs/billete-sdk/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：213 kB，12 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：0 个
- 首次发布：2026-09-29T01:02:23.210Z
- 最新版本发布：2026-11-10T15:25:24.348Z
- 近 30 天下载量：2666（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：34（近 12 个月 34 个）

## 中文简介

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

## 安装

```sh
npm install @boelabs/billete-sdk
```

也可以使用：`pnpm add @boelabs/billete-sdk`、`yarn add @boelabs/billete-sdk`、`bun add @boelabs/billete-sdk`

## README

# 比尔特 SDK

**(原始内容存档于2019-03-26) (英语). SDK official de TypeScript para la API de [比尔特](https://billete.run/)。 。 。 .**

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

[![npm](https://img.shields.io/npm/v/@boelabs/billete-sdk?color=000&label=npm)](https://www.npmjs.com/package/@boelabs/billete-sdk) [![Licencia: MIT](https://img.shields.io/badge/licencia-MIT-000)](https://npmcn.com/package/%40boelabs/billete-sdk/LICENSE) ![Tipos incluidos](https://img.shields.io/npm/types/@boelabs/billete-sdk?color=000) ![Sin dependencias](https://img.shields.io/badge/dependencias-0-000)

* * *

-   **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

-   [起义组织](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-instalaci%C3%B3n)
-   [伊尼西奥·拉皮多](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-inicio-r%C3%A1pido)
-   [配置](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-configuraci%C3%B3n)
-   [递归](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-recursos)
-   [蒙托斯语Name](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-montos)
-   [帕吉纳西翁](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-paginaci%C3%B3n)
-   [错误](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-errores)
-   [《同上》和《刑法》](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-idempotencia-y-reintentos)
-   [纳维加多尔](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-navegador)
-   [网络呼号](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-webhooks)
-   [诉讼](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-licencia)

## 起义组织

```bash
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`。 。 。 .

```ts
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: "ana@example.com", 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` (减) [网络呼号](https://npmcn.com/package/%40boelabs/billete-sdk/#readme-webhooks)) (中文(简体) ).

(原始内容存档于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.

## 配置

```ts
const billete = createBillete({
  apiVersion: "2026-11-10",
  environment: "production",
  apiKey: process.env.BILLETE_API_KEY,
  timeoutMs: 30_000,
  maxRetries: 2,
});
```

| 缩略语 | 叛变者 | 德克赖普西翁 |
| --- | --- | --- |
| `environment` | ——(义务) | `"test"` 欧 `"production"`德比·钱德斯迪尔·克拉夫. |
| `apiKey` | `BILLETE_API_KEY` | 奴隶秘密: `sk_test_…` 欧 `sk_prod_…`。 。 。 . |
| `baseUrl` | `BILLETE_BASE_URL`,则 `https://api.billete.run` | URL de la API. 互联网档案馆的存檔,存档日期2013-12-02. |
| `timeoutMs` | `30000` | (原始内容存档于2013-10-12). Tiempo máximo por intento. |
| `maxRetries` | `2` | (原始内容存档于2018-06-26) (英语). Reintentos ante errors de red, `429` 尔 `5xx`。 。 。 . |
| `fetch` | `globalThis.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` | —— 说 |
| `customerSessions` | `create` |
| `portalSessions` | `create` (lace al portal del cliente, válido 60 minutos) (法语) |
| `products` | `delete`, (中文(简体) ), `deleteVariant` |
| `plans` | `delete` |
| `features` | `delete`, (中文(简体) ), `check`, (中文(简体) ), `isEnabled`, (中文(简体) ), `listForCustomer`, (中文(简体) ), `consume`, (中文(简体) ), `release`, (中文(简体) ), `set` |
| `coupons` | `delete` |
| `checkouts` | `expire` |
| `paymentLinks` | `delete` |
| `invoices` | `void` (合作:革新与合作,促进平等) `url`(中文(简体) ) |
| `subscriptions` | `cancel`, (中文(简体) ), `resume` |
| `payments` | `refund`, (中文(简体) ), `listRefunds` |
| `fulfillments` | `deliver`, (中文(简体) ), `submitTracking` (原始内容存档于2013-10-29). entertainment de producos físicos; también `retrieve`, (中文(简体) ), `list` 电子 `iterate`(中文(简体) ) |
| `webhookEndpoints` | `delete` |
| `events` | `retrieve`, (中文(简体) ), `list`, (中文(简体) ), `iterate` |
| `exchangeRates` | `list` |
| `currencies` | `list` |

### Ejemplo:计划配额

```ts
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` 转接:

```ts
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}哦.

```ts
const october = await billete.payments.list({
  status: "succeeded",
  search: "ana@correo.com",
  createdFrom: "2026-10-01T04:00:00Z",
  createdTo: "2026-11-01T03:59:59Z",
});
```

## 错误

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

```ts
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`。 。 。 . |
| `code` | Código Estabable, 《关于公民的公约》: uno del [目录](https://billete.run/docs/api/errors#cat%C3%A1logo-de-c%C3%B3digos) (单位:千美元)`BilleteErrorCode`页:1 `network_error` 编号 : `invalid_response` 德尔SDK. |
| `message` | Descripció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}海平面图 圆顶:

```ts
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 **客户关系** 前端:

```ts
// Servidor
const session = await billete.customerSessions.create({ customer: "user_123" });
return { token: session.token };
```

```ts
// 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");
```

无法解释

```ts
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 , 请回答 : 帕索纳达.

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

## 网络呼号

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

```ts
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`) (中文(简体) ).

## 诉讼

[麻省理工学院](https://npmcn.com/package/%40boelabs/billete-sdk/LICENSE)

## 常见问题

### @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 和提交记录判断。

