You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Stripe创建Invoice时amount_due参数报错求助

问题:Spring Boot集成Stripe创建Invoice时提示"amount_due"为未知参数

在使用Spring Boot集成Stripe测试创建Invoice的REST API时,调用Invoice.create(params)抛出com.stripe.exception.InvalidRequestException,提示“Received unknown parameter: amount_due”。代码中传入了customer、collection_method、days_until_due、amount_due参数,且确认该参数在Stripe官方文档的Invoice对象中存在,请问如何解决这个未知参数问题?

代码示例:

Map<String, Object> params = new HashMap<>();
params.put("customer", customerModel.getCustomerId());
params.put("collection_method", form.getCollectionMethod());
params.put("days_until_due", 30L);
params.put("amount_due", form.getAmountDue());

Invoice invoice = Invoice.create(params);
return add(invoice,customerModel);

解决办法

  • 核心原因:amount_due是Invoice对象的只读属性,无法通过创建接口传入。它是Stripe根据发票关联的账单项目(Invoice Item)、订阅等自动计算出的金额,不属于创建Invoice时的可传参范围。

  • 修正步骤:

    1. 直接删除代码中params.put("amount_due", form.getAmountDue());这一行
    2. 如果需要自定义发票金额,需通过以下方式实现:
      • 先为目标客户创建Invoice Item,指定金额、货币等信息,Stripe会自动将其纳入发票计算amount_due
      • 或者基于客户已有的订阅生成发票,金额由订阅计划自动计算

示例代码(添加Invoice Item后创建发票)

// 1. 创建发票项目,指定要收取的金额(单位为最小货币单位,如人民币分、美元美分)
Map<String, Object> itemParams = new HashMap<>();
itemParams.put("customer", customerModel.getCustomerId());
itemParams.put("amount", form.getAmountDue()); // 例如:10000 代表100元人民币
itemParams.put("currency", "cny"); // 需匹配业务使用的货币类型
itemParams.put("description", "服务费"); // 可选:添加项目描述

InvoiceItem.create(itemParams);

// 2. 创建发票,Stripe会自动汇总计算amount_due
Map<String, Object> invoiceParams = new HashMap<>();
invoiceParams.put("customer", customerModel.getCustomerId());
invoiceParams.put("collection_method", form.getCollectionMethod());
invoiceParams.put("days_until_due", 30L);

Invoice invoice = Invoice.create(invoiceParams);
return add(invoice,customerModel);

内容的提问来源于stack exchange,提问作者Gulam Samdani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:50:57