@bloque/payments

中文文档
0.2.1发布于 2026/07/02MITTypeScriptESM + CJS零依赖近 30 天下载 6345

官方 Bloque SDK 用于创建和管理支付和结账.

中文使用文档
文档目录12 节
  1. 安装
  2. 认证
  3. 初始化( 建议)
  4. 初始化( 遗留)
  5. 快速启动: 创建退出
  6. API 密码
  7. Bloque 配置
  8. 离职
  9. 付款
  10. 3D 安全( 直接 API)
  11. 网络呼号
  12. 示例

Bloque 付款 SDK

官方TypeScript/JavaScript SDK用于整合Bloque支付.

安装

bun add @bloque/payments

认证

SDK支持三证模式:

证书前缀何处目的
密钥sk_test_ 编号 : sk_live_只有服务器以短寿命 JWT 交换 /origins/api-keys/exchange
可公布的密钥pk_test_ 编号 : pk_live_浏览器识别商家; 只读( 查看推车)
客户端秘密日本浏览器JWT范围为单一的退出会议(checkout.pay(中文(简体) )
import { Bloque } from '@bloque/payments';

const bloque = new Bloque({
  mode: 'sandbox',
  secretKey: process.env.BLOQUE_SECRET_KEY!,
  webhookSecret: process.env.BLOQUE_WEBHOOK_SECRET, // optional
});

SDK自动交换JWT的秘密密钥并缓存(在过期前刷新出1分).

初始化( 遗留)

const bloque = new Bloque({
  mode: 'sandbox',
  accessToken: process.env.BLOQUE_ACCESS_TOKEN!, // deprecated — use secretKey
});

快速启动: 创建退出

import { Bloque } from '@bloque/payments';

const bloque = new Bloque({
  mode: 'sandbox',
  secretKey: process.env.BLOQUE_SECRET_KEY!,
});

const checkout = await bloque.checkout.create({
  name: 'Pack Profesional de Productividad',
  description:
    'Periféricos premium para trabajo intensivo y alto rendimiento',
  asset: 'COPM/2',
  image_url: 'https://cdn.bloque.app/checkouts/productivity-pack.png',
  items: [
    {
      name: 'Teclado mecánico Keychron K2',
      description: 'Wireless, RGB, switches Blue',
      amount: 450_000_00,
      quantity: 2,
      image_url: 'https://cdn.bloque.app/items/keychron-k2.png',
    },
    {
      name: 'Mouse Logitech MX Master 3S',
      description: 'Inalámbrico, sensor 8K DPI',
      amount: 380_000_00,
      quantity: 1,
      image_url: 'https://cdn.bloque.app/items/mx-master-3s.png',
    },
  ],
  success_url: 'https://bloque.app/success',
  cancel_url: 'https://bloque.app/cancel',
  merchant: {
    name: 'Bloque',
    theme: {
      primary: '#10b981',
      primary_foreground: '#ffffff',
      background: '#f8fafc',
      surface: '#ffffff',
      border: '#d1d5db',
      input_border: '#10b98166',
    },
  },
  payment_methods: ['card', 'pse', 'cash'],
  payeer: {
    name: 'Nestor Cortina',
    email: '[email protected]',
  },
});

console.log('Checkout URL:', checkout.url);

API 密码

Bloque 配置

type BloqueConfig = {
  mode: 'sandbox' | 'production';
  secretKey: string;        // sk_test_... or sk_live_...
  timeout?: number;         // request timeout in ms (default 10_000)
  maxRetries?: number;      // retry count (default 2)
  webhookSecret?: string;
};

/** @deprecated Use BloqueConfig with secretKey instead */
type BloqueConfigLegacy = {
  mode: 'sandbox' | 'production';
  accessToken: string;
  timeout?: number;
  maxRetries?: number;
  webhookSecret?: string;
};

离职

bloque.checkout.create(params)

type CheckoutParams = {
  name: string;
  description?: string;
  image_url?: string;
  asset?: 'COPM/2' | 'DUSD/6';
  items: {
    name: string;
    description?: string;
    amount: number;
    quantity: number;
    image_url?: string;
  }[];
  success_url: string;
  cancel_url: string;
  metadata?: Record<string, string | number | boolean>;
  merchant?: {
    name: string;
    theme: {
      primary: string;
      primary_foreground: string;
      background: string;
      surface: string;
      border: string;
      input_border: string;
    };
  };
  payment_methods?: ('card' | 'pse' | 'cash')[];
  expires_at?: string;
};

注释:

  • asset 默认为 DUSD/6 当省略时.
  • 创建请求使用 redirect_url 来源于 success_url。 。 。 .

响应形状 :

type Checkout = {
  id: string;
  urn: string;
  object: 'checkout';
  url: string;
  client_secret: string;   // scoped JWT for browser-side checkout
  status: 'pending' | 'paid' | 'expired' | 'deposited' | 'cancelled';
  amount_total: number;
  amount_subtotal: number;
  asset: 'COPM/2' | 'DUSD/6';
  items: {
    name: string;
    description?: string;
    amount: number;
    quantity: number;
    image_url?: string;
  }[];
  metadata?: Record<string, string | number | boolean>;
  created_at: string;
  updated_at: string;
  expires_at: string | null;
};

通过 client_secret 改为 @bloque/payments-core 或者说 @bloque/payments-react 在浏览器上授权执行付款.

bloque.checkout.retrieve(checkoutId)

const checkout = await bloque.checkout.retrieve('checkout_123');

bloque.checkout.cancel(checkoutId)

const checkout = await bloque.checkout.cancel('checkout_123');

付款

bloque.payments.create(params)

支持的直接支付方法是 card, (中文(简体) ), pse,以及 cash (图 POST /payments/:type 在服务器上).

const payment = await bloque.payments.create({
  paymentUrn: 'did:bloque:payments:123e4567-e89b-12d3-a456-426614174000',
  payment: {
    type: 'card',
    data: {
      cardNumber: '4111111111111111',
      cardholderName: 'John Doe',
      expiryMonth: '12',
      expiryYear: '2028',
      cvv: '123',
      email: '[email protected]',
      installments: 1,
      currency: 'COP',
    },
  },
});

付款答复:

type PaymentResponse = {
  id: string;
  object: 'payment';
  status: 'approved' | 'rejected' | 'pending';
  amount: number;
  currency: string;
  created_at: string;
  three_ds?: { current_step: string; iframe: string };
};

bloque.payments.getStatus(paymentId)

由URN(如:. did:bloque:payments:...)在3DS挑战后.

const latest = await bloque.payments.getStatus(payment.id);

3D 安全( 直接 API)

当您用 3DS 处理卡片支付服务器侧面时, 通过浏览器指纹字段和可选的沙盒方案:

import type { BrowserInfo } from '@bloque/payments';

function browserInfoFromRequest(req: {
  headers: Record<string, string | string[] | undefined>;
}): BrowserInfo {
  const ua = String(req.headers['user-agent'] ?? '');
  const accept = String(req.headers['accept'] ?? '*/*');
  const lang = String(req.headers['accept-language'] ?? 'en');
  return {
    browser_user_agent: ua,
    browser_language: lang,
    browser_color_depth: '24',
    browser_screen_height: '900',
    browser_screen_width: '1440',
    browser_tz: '0',
  };
}

const payment = await bloque.payments.create({
  checkoutId: 'checkout_123',
  payment: {
    type: 'card',
    data: {
      cardNumber: '4111111111111111',
      cardholderName: 'John Doe',
      expiryMonth: '12',
      expiryYear: '2028',
      cvv: '123',
      email: '[email protected]',
      is_three_ds: true,
      browser_info: browserInfoFromRequest(req),
      three_ds_auth_type: 'challenge_v2', // sandbox only; omit in production
    },
  },
});

if (payment.three_ds?.iframe) {
  // 1) Decode HTML entities if the gateway returns escaped HTML
  // 2) If iframe is a URL (https://...), use <iframe src="...">
  // 3) Otherwise use <iframe srcdoc={decodedHtml}> with sandbox allow-scripts allow-forms allow-popups
  // 4) Show Mastercard ID Check branding before/around the challenge where required
  // 5) Poll until terminal state:
  let status = payment.status;
  while (status === 'pending') {
    await new Promise((r) => setTimeout(r, 3000));
    const next = await bloque.payments.getStatus(payment.id);
    status = next.status;
  }
}

字段名称 BrowserInfo 匹配 Bloque 付款 API (browser_user_agent, (中文(简体) ), browser_language(见a/c.5/49/70,附件).

网络呼号

校验webhook 签名( I)HMAC-SHA256:

const isValid = bloque.webhooks.verify(
  rawBody,
  signature,
  { secret: process.env.BLOQUE_WEBHOOK_SECRET! },
);

您也可以设置 webhookSecret 期间 Bloque 初始化和省略 options 内 verify。 。 。 .

示例

完整的例子见:

  • examples/basic-checkout.ts

版本与发布记录

@bloque/payments 共发布 22 个版本,首次发布于 2025/12/19;过去 12 个月发布了 22 个版本。

版本发布日期距今
0.2.1latest2026/07/024 个月前
0.1.82026/05/195 个月前
0.1.72026/05/195 个月前
0.1.62026/05/185 个月前
0.1.52026/05/115 个月前
0.1.42026/04/077 个月前

关于 @bloque/payments 的常见问题

@bloque/payments 是什么?

官方 Bloque SDK 用于创建和管理支付和结账.

如何安装 @bloque/payments?

在项目目录运行 npm install @bloque/payments,或使用 pnpm add / yarn add / bun add。

@bloque/payments 支持 TypeScript 吗?

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

@bloque/payments 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@bloque/payments 需要什么版本的 Node.js?

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

@bloque/payments 可以商用吗?

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

@bloque/payments 的下载量有多少?

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

@bloque/payments 还在维护吗?

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