比尔特 SDK
(原始内容存档于2019-03-26) (英语). SDK official de TypeScript para la API de 比尔特。 。 。 .
经济、社会、文化权利委员会 侍从和前端.
- 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}你觉得呢.
- 依赖性: 独奏
fetchy 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"德比·钱德斯迪尔·克拉夫. |
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:计划配额
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。 。 。 . |
code | Código Estabable, 《关于公民的公约》: uno del 目录 (单位:千美元)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}海平面图
圆顶:
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) (中文(简体) ).