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时的可传参范围。修正步骤:
- 直接删除代码中
params.put("amount_due", form.getAmountDue());这一行 - 如果需要自定义发票金额,需通过以下方式实现:
- 先为目标客户创建Invoice Item,指定金额、货币等信息,Stripe会自动将其纳入发票计算
amount_due - 或者基于客户已有的订阅生成发票,金额由订阅计划自动计算
- 先为目标客户创建Invoice Item,指定金额、货币等信息,Stripe会自动将其纳入发票计算
- 直接删除代码中
示例代码(添加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
相关产品推荐
相关产品推荐

