@crvouga/mockingbird-service-kill-bill

中文文档
3.10.16发布于 2026/11/07MITTypeScriptES Module构建来源已验证近 30 天下载 1.6万

国有Kill Bill 模拟器 账户、订阅、发票、付款、信用、退货、目录和时钟控制.

中文使用文档
文档目录7 节
  1. 安装
  2. 使用量
  3. 现场平等
  4. 控件
  5. API 密码
  6. 菲德尔边界
  7. 账户、订阅和发票兼容性增加

@crvouga/ mockingbird-service-kill-bill 页面存档备份,存于互联网档案馆

本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .

州立Kill Bill REST模拟器用于计费整合测试. 它模拟了租户范围账户、付款方法、订阅、捆绑、发票、付款、信贷、退款、退款、退款、退款、目录、审计元数据、一个测试钟、账户逾期状态以及秘密保护的生命周期网络呼号.

安装

npm install -D @crvouga/mockingbird-service-kill-bill

仅限无害环境管理。 节点22+或Bun 1.2+.

使用量

import { AccountApi, Configuration, apiKey } from "killbill"
import { createServer } from "@crvouga/mockingbird-service-kill-bill/server"

const emulator = await createServer()

// The Kill Bill client your application already uses. Only its basePath changes.
const config = new Configuration({
  basePath: emulator.url,
  username: "admin",
  password: "password",
  apiKey: apiKey("bob", "lazar"),
})
const accounts = new AccountApi(config)
await accounts.createAccount({ name: "Synthetic Customer", externalKey: "customer-1", currency: "USD" }, "example")
const { data: account } = await accounts.getAccountByKey("customer-1")
console.log(account.accountId, account.currency) // acc-… USD

await emulator.close()

默认证书为 Basic 认证 admin:password 加租户头 X-Killbill-ApiKey: bob 财务报告和审定财务报表 X-Killbill-ApiSecret: lazar变异也要求 X-Killbill-CreatedBy;可选的理由和评论头被记录在审计日记.

POST /1.0/kb/tenants 创造另一个拥有基本授权的房客 X-Killbill-CreatedBy 只有这个 用那个房客的阿皮钥匙创建的账户 藏在别处. POST /1.0/kb/tenants/registerNotificationCallback?cb= 将发票和付款活动作为Kill Bill通知JSON。 与Kill Bill 0.24.16(以对真实服务器的回调计量)一样,发送是在请求得到答复后进行,按每个账户的顺序排列:在巴士闲置时引发的事件等待 notificationDelayMs (2000年默认;Kill Bill的公交车取走2–3 s),在投递期间或投递后升起的公交车,如回电时的付款,立即出行(投递后Kill Bill的公交民意调查再次出行;测量到~70 ms). GET /1.0/kb/test/queues 等待待产。 在每次尝试失败后15分、30分、2小时、12小时和一天的时间内,当钟表到达时(一个钟表移动或下一个请求),回调(non-2xx或没有回答)被重审。 进程 onEvent 钩子在请求中仍然接收事件.

GET /1.0/kb/accounts/pagination 财务报告和审定财务报表 GET /1.0/kb/invoices/pagination 列出经认证的 租户现有的帐单记录是赤裸的阵列. offset 默认为 0并 limit 改为100; 正限使用创建顺序,而负限则倒置. 发票更新保留 原地处地. 答复正在进行 X-Killbill-Pagination-CurrentOffset, (中文(简体) ), TotalNbRecords 财务报告和审定财务报表 MaxNbRecords。 。 。 . NextOffset 财务报告和审定财务报表 NextPageUri 仅在另一页存在时才显示。 下一页 URL 保留选中的命名空间并配置了管理员前缀; 继续发送 Basic 认证和 租户头. 返回空/已耗尽的页面 []。零限制也返回 []作为真正的SQL pagination确实如此;客户端应该停止在一空页面上. 账户余额默认为无效; 使用 accountWithBalance=true 或者说 accountWithBalanceAndCBA=true 实际发票余额/CBA. 这两本读作使用与发票的创建、支付和作废相同的收款,并参与 标准命名空间、时钟、重置、快照和故障控制.

先知是杀比尔的 账户资源, (中文(简体) ), 发票资源, (中文(简体) ), 贴花反应, (中文(简体) ), 财务报告和审定财务报表 命令执行。 。 。 . 模拟器的有限度的收集是精确的; 卖家的大数据集的计数热度, 审计预测和搜索终点没有建模。 无效的 pagination 使用模拟器已存在的 错误信封; 准确的活性错误文本仍未验证 。 发票 如Kill Bill 0.24.16所示.

现场平等

bun run parity -- [scenario…] [--out <dir>] [--allow-remote] 重放固定请求情景 (单位:千美元)scripts/scenarios.ts)针对你运行的"杀手"(Kill Bill)和"新模范",每个新房客都有 创建并传播规范的文字记录(标识成为占位符和即时) <ts>* 日期, 数额和状态. KILL_BILL_URL 杀死比尔的名字( 例如) http://127.0.0.1:8080· ; KILL_BILL_USERNAME编号 :KILL_BILL_PASSWORD 默认为 admin编号 :password(三); 没有它,脚本出口2。 它会写,所以它拒绝一个非回放 URL 没有 --allow-remote。 。 。 .

假想包括未找到的答案、目录错误、续签发票 (单位:千美元)POST /1.0/kb/invoices及其目标日期、账户贷记(承诺和草案)及其 7个注销形状,项目调整后的外部退款 及其密钥检索和审计日志, 未来日期订阅在开始前取消, a 权利暂停并恢复,在两次续约中暂停计费,BCD在测试下更改 时钟(一 二叠加并按年度计划) (即于所请之日,至期终同出一出,并取去 )和续展日(停收帐单、放行和BCD更改)。 改变计划 方案使用第二个目录,其规则在 END OF TERM 和 每一次Kill Bill的默认对齐 他们都符合Kill Bill 0.24.16(版本) Geviti在生产中运行),于2026-11-06.

控件

  • POST /__admin/payments/decline-next 财务报告和审定财务报表 /pending-next 选择下一个付款结果.
  • POST /__admin/payments/:id/retry 继承最近失败或待处理的交易.
  • POST /__admin/catalog/plans 种子一个计划.
  • GET /__admin/billing 检查账单状态和审计条目. GET /__admin/state 是共享的收藏视图.
  • GET /1.0/kb/test/clock 返回 Kill Bill 的时钟 JSON (currentUtcTime, (中文(简体) ), localDate, (中文(简体) ), timeZone) (中文(简体) ). PUT /1.0/kb/test/clock?requestedDate=... 预付经常性账单; POST /1.0/kb/test/clock 没有 requestedDate 重新发送到系统时间 .
  • PUT /1.0/kb/subscriptions/:id/undoChangePlan 取消待定的计划更改。 没有待修改,它返回400 和杀死比尔错误代码1071.
  • GET /1.0/kb/test/queues?timeoutSec= 返回 200,当没有适当的通知或总线事件未完成时,返回 200,然后返回 412 秒。 默认超时为5秒. 通知只有在通知 effectiveDate 时间或时间之前;行入 kb_bus_events 总是数起。 两个收藏都通过 GET /__admin/state。 。 。 .
  • 故障预设覆盖插件失败,速率限制,网络丢失,以及webhook重复/重排/投放交付.

API 密码

  • KillBillAPI, (中文(简体) ), KillBillAPIOptions, (中文(简体) ), KillBillEvent: REST处理器与事件合同.
  • 账户、订阅、捆绑、发票、付款、交易和目录状态类型.
  • createRuntime, (中文(简体) ), KillBillRuntime, (中文(简体) ), KillBillRuntimeOptions:全程运行和webhook中枢.
  • KILL_BILL_NAMESPACE, (中文(简体) ), KILL_BILL_PRESETS: 命名空间和故障控制.
  • document, (中文(简体) ), operationIds, (中文(简体) ), supportedOperationIds: 生成了 OpenAPI 元数据.
  • createServer, (中文(简体) ), KillBillServerOptions, (中文(简体) ), DEFAULT_PORT, (中文(简体) ), serveTarget 从 ./server。 。 。 .

菲德尔边界

模拟器的目标是确定适配器和生命周期测试。 它不运行 Kill Bill 插件, 税收引擎, 数据库, 通知工人, 或生产权利和调用算法 。 发票付款 externalPayment=true 例外: 它们存储在内置中 __EXTERNAL_PAYMENT__ 方法,而不发送到网关. GET /1.0/kb/invoices/{invoiceId}/payments 以 targetInvoiceId。 。 。 . POST /1.0/kb/invoices/{invoiceId}/payments如Kill Bill 0.24.10所述,外部或通过付款方法在发票余额上停留:没有欠款,它没有记录任何付款并回答204(重试使用同一方法) paymentExternalKey 超过余额的金额拒绝与 PaymentApiException 7199 (英语). 标签账户 AUTO_INVOICING_OFF (单位:千美元)00000000-0000-0000-0000-000000000002未开具发票:订阅从 chargedThroughDate 没有, POST /1.0/kb/invoices 回答201和发票 什么都没有,和 DELETE /1.0/kb/accounts/{id}/tags?tagDef= (204) 一次性持有的标签单(平等方案) auto-invoicing-off) (中文(简体) ). 自动支付新发票跳过标签账户 AUTO_PAY_OFF (附则定义) 00000000-0000-0000-0000-000000000001),否则只支付运行时尚欠的余额,因此自动支付运行前的通知消费者记录不再收取费用. 申请期间自动付费,所以消费者支付延迟付款 INVOICE_CREATION 没有发现任何欠款(204年),如"杀"法案0.24.16. GET /1.0/kb/invoicePayments/{paymentId} 返回该付款加 targetInvoiceId。 。 。 . POST /1.0/kb/invoicePayments/{paymentId}/refunds 添加a REFUND 同一笔付款(杀害法案0.24.10). externalPayment=true 在退款上记录了一笔单独的信用付款 并留下原件 refundedAmount 不变. GET /1.0/kb/test/queues 只有报告是否尚未提交到期通知和总线活动,包括推车通知。 未来日期的通知,包括生效日期仍然在时间之前的中期计划的修改,不算数. GET /1.0/kb/accounts/{accountId}/overdue 使用固定的 Kill Bill 0.24.10 配置: 合成清晰状态 __KILLBILL__CLEAR__OVERDUE_STATE__状态 OD1 如果最早的未付发票(正结余,不作废)至少已经过期一天(timeSinceEarliestUnpaidInvoiceEqualsOrExceeds) (中文(简体) ). 上传已过期的替换配置没有建模 。 订阅 priceOverrides 条目 phaseName 实值 {planName}-evergreen (或 phaseType 实值 EVERGREEN (b) 替换经常性发票项目上的目录金额 GET /1.0/kb/subscriptions/{id} 返回已发送的更改。 其他目录阶段没有建模. POST /1.0/kb/subscriptions 如 Kill Bill 0.24.10 在目录无法为计划服务时所做的: 没有上传目录( 启动模拟器 ) plans: []它返回500个 java.lang.IllegalStateException "版本Catalog目录中没有用于输入日期的现有版本...",因此上传其目录于该错误上的客户端可以恢复,一个上传目录中缺少的计划返回了400个 SubscriptionBaseApiException 代码2021"找不到任何名为"..."的计划".

账户、订阅和发票兼容性增加

以下合同为 最好猜,不是甲骨文验证他们跟随官员 账户 API, (中文(简体) ), 订阅资源, (中文(简体) ), 发票资源, (中文(简体) ), Shiro 管理员配置,以及 外部总线收听器。 。 。 . 现场对等跑者退出2号,因为它需要一个孤立的租户,没有启用; 确切的供应商错误、账户特定许可、按比例分配和账单过渡没有重现.

  • GET /1.0/kb/security/permissions 只要求配置的基本证书和返回 ["*:*"],模拟默认管理员。 证书遗失或不正确 UNAUTHORIZED自定义角色和用户特定许可清单没有建模.
  • PUT /1.0/kb/accounts/{accountId} 只更新已提供的内容 name 财务报告和审定财务报表 email 区域 返回 204 键。 除非 treatNullAsReset=true。变化不可变 字段返回 400 INVALID_ACCOUNT; 其他更新字段返回模拟器限制 UNSUPPORTED_ACCOUNT_UPDATE。拒绝更新后,账户保持不变.
  • POST /1.0/kb/subscriptions/{subscriptionId}/block 记录屏蔽状态并返回 201 (《杀害法案》0.24.16,平等设想) block-entitlement) (中文(简体) ). 最新有效状态 service 应用; 任何屏蔽服务都会暂停计费,以及 isBlockEntitlement 制作 订阅数 BLOCKED。每个州增加 PAUSE_编号 :RESUME_ENTITLEMENT 财务报告和审定财务报表 _BILLING 订阅事件及其捆绑 timeline。 。 。 . requestedDate 可选附表a 状态。 一旦暂停计费生效,将计入其余计费期(a) REPAIR_ADJ 发票 CBA_ADJ 成为账户信用)和暂停续期账单 无;使用该信用额度,从自己的一天到下一个开出账单的一天,按比例结算的恢复账单 第一(《杀害法案》第0.24.16条,平等设想) billing-pause-resume) (中文(简体) ). 屏蔽状态变化 就像Kill Bill那样 立即重新开票.
  • PUT /1.0/kb/subscriptions/{subscriptionId}/bcd 接受 billCycleDayLocal 从1起至31起 和返回 204 (杀害法案 0.24.16, 均等假设) bcd-*) (中文(简体) ). 按日历延长的每月计划 在计费日数月, 夹到月底。 从 effectiveFromDate (默认的今天) 首个休养期是新日的起养期,在生效日期后期开具账单 最后一个新帐单日或前日:在新帐单日开出帐单,按比例计算 新的时期(BCD 5,从01-01帐号02-01.02-05,01-05,4/31),否则为本月 从一开始(BCD 5,从02-01起,从02-01起,从4/28起)。 订阅报告新一天 从第一个新计费日开始 半年度和年度计划遵循同样的规则 更长时间。 更改堆栈,每个从自己的生效日期接管(稍后的更改为 相同日期取代;对等设想 bcd-twice页:1 billCycleDayLocal 发送时间 订阅从一开始就是它的BCD. 从期末算起的帐单,已发行 后天,BCD搬到了那一天, 延长了整整一段时期(均等情景) move-renewal-day-annual) (中文(简体) ). 回溯变化返回 UNSUPPORTED_BCD。 。 。 .
  • PUT /1.0/kb/subscriptions/{subscriptionId} 改变计划(《杀害法案》0.24.16,平等) 假设 change-*) (中文(简体) ). 与 billingPolicy=IMMEDIATE (默认)更改于今日生效; 只有一个 requestedDate,该日期 billingPolicy=END_OF_TERM时 续约日期, 重新提出计划。 生效后,它开出一张发票: 从那天到下一个计费日的新计划 也就是当月的时期 (根据04-11号法案04-11.next 04-01 at 355/365修改年度计划) REPAIR_ADJ 联 合 国 旧计划账单期的未用份额,然后作为自动付款支付差额 会的. priceOverrides 与更改一起发送,替换订阅的。 每个变化都是 CHANGE (一) 请求时(当即请求时), prices 列表 订阅的每个计划都已经或正在更改,事件报告生效的计划 当他们发生。 取消取消时或取消之后的更改; undoChangePlan 财务报告和审定财务报表 DELETE …/changePlan 放弃任何尚未生效的更改。 目录是自己的 更改政策规则不读:没有政策和日期意味着 IMMEDIATE。 。 。 .
  • POST /1.0/kb/invoices/dryRun?accountId=...&targetDate=YYYY-MM-DD 预览重现 至 targetDate 每一次未开具发票的主动、解锁订阅, 消费身份证、排放事件、收取费用或推进计费。 它支持 TARGET_DATE 只有;其他干运行类型/动作返回一个明显的错误。 退税 200 有发票 items; 没有到期返回 204. 预览ID是合成的. 税收和 改变应享权利模拟不是模拟.
  • POST /1.0/kb/invoices?accountId=...&targetDate=YYYY-MM-DD 发票 账户的活跃订阅开始于或在此之前 targetDate不动时钟, 按自动付款方式支付,并连同发票退回201 Location. 待决 开始于或在此之前的订阅 targetDate 也是记帐的 没有发票 返回 Kill Bill 0.24.16的404,没有实体(Tomcat的HTML页面)。 37个月或以上的目标 今天之后是400个 InvoiceApiException 4005和15个以上项目,一个订阅a 日(包括审查)为400码4"SAFETY BOUND TRIGGERED"(均等方案) invoice-renewal, (中文(简体) ), invoice-target-dates) (中文(简体) ).
  • GET /1.0/kb/paymentTransactions?transactionExternalKey=... 返回所持有的付款 交易为 PaymentJson,或 404 个 PaymentApiException 7020"付款... 不存在".
  • 退款会降低发票的金额 refundAdj 通过退款,通过 invoicePayments 或者说 payments与 isAdjusted 这个 添加 ITEM_ADJ (“发票项目调整”) adjustments这 降低金额并留下余额;不这样做,退款将重新打开余额. 未按键 支付或交易按其本人的id键,但外部退款的信用支付除外, 获得生成的密钥(杀害法案0.24.16,均等方案) refund-adjusted) (中文(简体) ).
  • POST /1.0/kb/credits 每笔信贷增加a CREDIT_ADJ (-个,给定的描述)和a CBA_ADJ (+amont,"调整(账户信用)")在新发票上, COMMITTED 与 autoCommit=true 财务报告和审定财务报表 DRAFT 否则,回答200与 CREDIT_ADJ 金额 (正数). PUT /1.0/kb/invoices/{invoiceId}/commitInvoice 执行 DRAFT 返回 204 (均等情况) account-credit-draft) (中文(简体) ). 账户的 accountCBA 这是 creditAdj 联 合 国 已承付的发票及其 accountBalance 期初余额减去贷方 新的发票用途 (“调整(使用账户信贷)”),新的信贷支付账户的开户 发票一次,最古老的一次,只保留其余部分(均等情况) credit-pays-open-invoice) (中文(简体) ).
  • DELETE /1.0/kb/subscriptions/{id}:权利在期末终止 entitlementPolicy=END_OF_TERM现在 IMMEDIATE,否则 requestedDate (一天或一天) (即时)或现在;期末停止计费 billingPolicy=END_OF_TERM 和默认的, 现在用 IMMEDIATE,或打开 requestedDate 与 useRequestedDateForBilling=true编辑 订阅读取 CANCELLED 从权利站起,携带 STOP_ENTITLEMENT 财务报告和审定财务报表 STOP_BILLING 账单里没有账单 收账单,停止在一个 记账期后未使用的份额 调整("调整(订阅变更)";等价假想) cancel-after-item-adjust(单位:千美元) REPAIR_ADJ 发票 CBA_ADJ 成为账户信用。 订阅开始前请求的瞬间是 EntitlementApiException 1001号.
  • 一个未知的账户,订阅或发票id是404 ObjectDoesNotExist ("Object id=...) (中文(简体) ) 类型=ACCOUNT不存在!");未知账户外部密钥为404 AccountApiException 3003 (英语). Kill Bill 用Tomcat的404页回答一个错误的(非UUID)id; 模拟符ids不是 UUID , 所以模拟器用 ObjectDoesNotExist。 。 。 .
  • audit=FULL (或 MINIMAL在读取时,增加每张发票、发票项目、付款和交易 审计行 : INSERT (和 UPDATE (支付和交易) X-Killbill-CreatedBy, (中文(简体) ), -Comment, (中文(简体) ), -Reason,以及 X-Request-Id 作为 userToken (产生) 案件发生时的种子身份证明 帐单记录为 SubscriptionBaseTransition。 。 。 . 无 audit 每个物体携带 auditLogs: []。 。 。 .
  • 带有目录的 XML 上传 effectiveDate 已经上传的租户是400人 CatalogApiException 2080"租户无效目录:";更早和更晚的日期 装入.
  • 订阅、捆绑、发票、发票项目、付款和帐户的字段与 Kill Bill 0.24.16 制作回复:订阅后加 prices, (中文(简体) ), events, (中文(简体) ), billingPeriod, (中文(简体) ), productName 以及其它问题 SubscriptionJson 字段,报告 startDate 即时创造, 键入未按键的账户,按其id订阅和捆绑,按 发票号码,报告 chargedThroughDate 无效, 直到 并读取 PENDING 直至以后开始(也在其之前取消)。 这个 账户发票清单只包含金额和项目 includeInvoiceComponents=true。 。 。 .
  • POST /1.0/kb/invoices/{invoiceId} 调整指定的 invoiceItemId 以正数表示 amount,或省去其剩余可调整金额。 它返回 201 并附加 a 负数 ITEM_ADJ 与原项目挂钩,减少发票金额。 随你便 期初余额以外的账户贷记:a CBA_ADJ ("调整(账户信用)") 使余额保持在0并增加 creditAdj (《杀害法案》0.24.16,平等设想) item-adjust-paid) (中文(简体) ). 无效的项目、金额、账户或货币在不更改的情况下发生故障 发票; 其准确的错误代码是模拟或近似.
  • 发票购买成功和失败 INVOICE_PAYMENT_SUCCESS 财务报告和审定财务报表 INVOICE_PAYMENT_FAILED 并行 PAYMENT_SUCCESS 财务报告和审定财务报表 PAYMENT_FAILED,与 objectType: "INVOICE", (中文(简体) ), objectId 等于发票身份证和账户身份证。 仅待付款 PAYMENT_PENDING。事件既使用过程内钩又使用注册的租户召回. POST /1.0/kb/accounts/{accountId}/invoicePayments 支付全额未付发票余额 targetDate (今天默认),当没有到期时返回201,或返回204。 自定义 paymentAmount 财务报告和审定财务报表 pluginProperty 返回时 UNSUPPORTED_INVOICE_PAYMENT。成功的管理程序也发出 发票成功事件.

未知账户、订阅和发票身份证保留现有的404个错误信封; 租户隔离适用于这些业务.

版本与发布记录

@crvouga/mockingbird-service-kill-bill 共发布 47 个版本,首次发布于 2026/09/23;过去 12 个月发布了 47 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.10.16latest2026/11/074 天前
3.10.152026/11/074 天前
3.10.142026/11/074 天前
3.10.132026/11/074 天前
3.10.122026/11/065 天前
3.10.112026/11/065 天前

关于 @crvouga/mockingbird-service-kill-bill 的常见问题

@crvouga/mockingbird-service-kill-bill 是什么?

国有Kill Bill 模拟器 账户、订阅、发票、付款、信用、退货、目录和时钟控制.

如何安装 @crvouga/mockingbird-service-kill-bill?

在项目目录运行 npm install @crvouga/mockingbird-service-kill-bill,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mockingbird-kill-bill,可以用 npx mockingbird-kill-bill 直接运行。

@crvouga/mockingbird-service-kill-bill 支持 TypeScript 吗?

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

@crvouga/mockingbird-service-kill-bill 支持 ESM 还是 CommonJS?

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

@crvouga/mockingbird-service-kill-bill 可以商用吗?

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

@crvouga/mockingbird-service-kill-bill 的下载量有多少?

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

@crvouga/mockingbird-service-kill-bill 还在维护吗?

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