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 中的服务日期和描述为准。
如何确认客户应付金额
可以逐张核对:
- 记录
LAST RECURRING INVOICE的 invoice ID。 - 列出同一时间范围内的所有
NEW INVOICES。 - 检查每张 invoice 的
typeCode、statusCode、总额和余额。 - 查看 invoice items,确认收费项目和对应的服务时间。
- 核对支付、credit 和账单调整记录。
- 只汇总有效且尚未结清的余额。
如果门户页面同时显示 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,但计算依据是每张账单当前的未结余额,不能机械地将两类账单的票面金额相加。
备注:内容仅供参考。
