PAYATHON 2026

SoftLayer 中 NEW invoice 如何向客户收费?

支付老李

结论

不能把 LAST RECURRING INVOICE 和所有 NEW INVOICES 的票面金额直接相加,并将结果视为客户尚需支付的金额。

LAST RECURRING INVOICE 指最近生成的一张周期性账单,并不意味着当前 billing cycle 内不会再有其他账单。新增资源、一次性费用、按量费用或账单调整都可能生成单独的 NEW INVOICES,这些费用不会自动合并到已经生成的 recurring invoice 中。

客户实际需要支付的是每张有效账单的未结余额:

实际应付金额 = Σ 每张有效 invoice 的未结余额

因此:

  • LAST RECURRING INVOICE 尚未支付时,需要支付其未结余额。
  • NEW INVOICE 已正式入账且仍有未结余额时,也需要支付。
  • 已支付、已抵扣、已作废或余额为 0 的 invoice,不应重复计入。
  • 不要只根据门户中的 NEW 标签判断是否需要付款,还要检查 invoice 的状态、余额和支付记录。

为什么会出现多张账单

SoftLayer 的 recurring invoice 主要包含周期性费用。账单生成后,如果账户中又出现新的计费项目,例如新增服务器、带宽超额、一次性安装费或人工账单调整,系统可能为这些项目另外生成 invoice。

所以,同一个 billing cycle 内可能有多张 invoice。账单周期用于确定费用所属的时间范围,invoice 则是具体的结算凭证,两者并非一一对应。

LAST RECURRING INVOICE 也不能理解为上一个周期全部费用的最终汇总。部分周期性服务可能采用预付方式计费,按量费用则可能在实际使用后结算。费用所属期间应以 invoice item 中的服务日期和描述为准。

如何确认客户应付金额

可以逐张核对:

  1. 记录 LAST RECURRING INVOICE 的 invoice ID。
  2. 列出同一时间范围内的所有 NEW INVOICES。
  3. 检查每张 invoice 的 typeCode、statusCode、总额和余额。
  4. 查看 invoice items,确认收费项目和对应的服务时间。
  5. 核对支付、credit 和账单调整记录。
  6. 只汇总有效且尚未结清的余额。

如果门户页面同时显示 invoice total 和 balance,应以 balance 判断当前欠款。票面总额是账单生成时的原始金额,无法反映之后发生的付款或抵扣。

API 检查示例

下面的 Python 示例通过 SoftLayer API 获取 invoice,并汇总仍有未结余额的账单:

import SoftLayer
from decimal import Decimal

client = SoftLayer.create_client_from_env()

mask = (
    "mask["
    "id,"
    "createDate,"
    "closedDate,"
    "typeCode,"
    "statusCode,"
    "invoiceTotalAmount,"
    "balance"
    "]"
)

invoices = client["Account"].getInvoices(mask=mask)

total_due = Decimal("0")

for invoice in invoices:
    balance = Decimal(str(invoice.get("balance") or "0"))

    print(
        invoice.get("id"),
        invoice.get("createDate"),
        invoice.get("typeCode"),
        invoice.get("statusCode"),
        invoice.get("invoiceTotalAmount"),
        balance,
    )

    if balance > 0:
        total_due += balance

print("Total outstanding balance:", total_due)

API 的返回结构可能因账户权限而异。如果响应中没有 balance,需要结合 invoice 总额、付款、credit 和 adjustment 数据计算剩余金额,不能只对 invoiceTotalAmount 求和。

注意事项

  • 不要根据 invoice 的创建日期判断它是否已经付款。
  • 不要把 NEW 直接理解为“尚未收费”,它可能只是门户用于标记新账单的标签。
  • 已经自动扣款但仍显示在历史列表中的 invoice,不要重复计算。
  • 判断费用属于哪个 billing cycle 时,invoice item 的服务期间比 invoice 创建日期更有参考价值。
  • 如果账单状态、余额与付款记录不一致,请携带 invoice ID 联系 IBM Cloud Classic Infrastructure Billing 支持确认。

客户可能需要同时支付 recurring invoice 和之后生成的 new invoices,但计算依据是每张账单当前的未结余额,不能机械地将两类账单的票面金额相加。

备注:内容仅供参考。