首页 > 解决方案 > 如何向现有客户收取产品费用?

问题描述

如果您知道 Audible,这就是我的服务的运作方式。您可以订阅获得积分,但您也可以立即购买单件商品(如果您愿意)。

订阅对我有用,但我无法理解的是如何使用现有客户的默认付款方式对单个项目收费。让我们坚持Audible。

用户想要购买单个音轨。

我虽然可以:

  1. Product为此轨道创建一个(设置名称和图像网址)
  2. 创建或重新使用 aPrice并设置我的数据库中所述的费用金额
  3. 不知何故为此/创建一个Invoice或并移动一个ChargePriceProduct

但是,我只是不太明白如何做到这一点。

查看 的文档Invoice,在我看来,我无法添加单个产品或价格并让 Stripe 自动向客户收费。

我认为它看起来像这样:

public void buyProduct(String productId, Customer customer) {

    InvoiceCreateParams.builder()
            .setCustomer(customer.getId())
            .setDefaultPaymentMethod(customer.getPaymentMethod())
            .setAutoAdvance(true)
            .setCollectionMethod(CollectionMethod.CHARGE_AUTOMATICALLY)
            // Add product/price here ?
            .build();

    // ...
}

那么,向客户收取产品费用的最简单方法是什么?

更新

我注意到一个InvoiceItem可以带Invoice身份证的。

以下是否正确(原则上)?

设置autoAdvance为收集方法trueCHARGE_AUTOMATICALLY作为收集方法,用户会按照我打算使用下面的代码正确收费吗?

public void createInvoice() throws StripeException {
    
    String customerId = null;
    String paymentMethodId = null;
    String priceId = null;
    boolean chargeAutomatically = true;

    InvoiceCreateParams invoiceCreateParams = InvoiceCreateParams.builder()
            .setCustomer(customerId)
            .setDefaultPaymentMethod(paymentMethodId)
            .setAutoAdvance(chargeAutomatically)
            .setCollectionMethod(CollectionMethod.CHARGE_AUTOMATICALLY)
            .build();

    Invoice invoice = Invoice.create(invoiceCreateParams);

    InvoiceItemCreateParams invoiceItemCreateParams = InvoiceItemCreateParams.builder()
            .setCustomer(customerId)
            .setPrice(priceId)
            .setInvoice(invoice.getId())
            .build();

    InvoiceItem invoiceItem = InvoiceItem.create(invoiceItemCreateParams);
    
}

一开始创建发票感觉很奇怪,然后设置所有内容以立即向客户收费,只有这样做之后,才能设置用户想要购买的实际项目。

标签: stripe-payments

解决方案


你应该看看这个:https ://stripe.com/docs/billing/invoices/sending#one-off

首先,您需要使用价格和客户 ID 创建发票项目(无需先创建发票)。您可以根据需要创建任意数量的发票项目,具体取决于您要向客户收取的费用。然后,您可以创建一个发票,该发票将自动提取给定客户的所有待处理发票项目。


推荐阅读