每次数量更新都会立即支付条款

时间:2018-06-13 05:57:48

标签: stripe-payments

我们使用Stripe作为支付网关,我们有一个年度计划,即该计划的计费周期为1年。

在结算周期内,用户可以更新选择更多席位,从而增加订阅计划的数量。

Subscription subscription = Subscription.retrieve(paymentDetails.getSubscriptionId());
int currentQuentity = subscription.getQuantity();
Map<String, Object> updateParams = new HashMap<String, Object>();
updateParams.put("quantity", (currentQuentity + changeInQuantity));
subscription.update(updateParams);

因此,对于任何更新条带退款(如果数量减少)和费用(如果数量增加)在结算周期结束时按比例分配。

在我们的业务逻辑中,我们需要在每次数量更新时立即付款(收费或退款),而不是在结算周期结束时。条纹中是否有任何方法可以实现这一目标。

4 个答案:

答案 0 :(得分:2)

要在订阅更新后立即收费,您需要在订阅更新后立即创建发票。这将导致立即充电

要创建发票,您只需致电:

Stripe.apiKey = "sk_test_BQokikJOvBiI2HlWgH4UWQfQ2";

Map<String, Object> invoiceParams = new HashMap<String, Object>();
invoiceParams.put("customer", "cus_D2XUIsncG7YUX");

Invoice.create(invoiceParams);

参考(https://stripe.com/docs/api#update_subscription):

enter image description here

答案 1 :(得分:0)

我花了很多时间试图找出答案,希望我可以节省一些时间。要为更改数量或订阅计划付款,您需要执行以下操作:

  1. Update subscription进行了新的更改。
  2. Create an invoice。 令我感到困惑的是,Stripe神奇地知道只为更新的订阅项目开票,而不为即将到来的计费周期项目开票。

  3. Retrieve the newly created invoice

  4. Finalise the invoice
  5. Take payment for the invoice这假定您的客户已存储一种付款方式。

仅当完成所有步骤后,您才成功为订阅更改付费(并且仅针对更改付费)。您可以一次性完成所有操作。客户应该从Stripe的末尾收到发票电子邮件。

对我而言,使事情变得复杂的是,阅读文档后,我得到的印象是,只要将订阅设置为"billing": "charge_automatically",Stripe就会自动为我完成所有这些工作。事实并非如此,在Stripe的辩护中,他们在与upgrading and downgrading plans相关的文档页面的底部提到了这一点:

如果您希望客户在同一计费周期内切换到更昂贵的计划时立即支付价差,则需要在切换后生成发票。

答案 2 :(得分:0)

如果您想为订阅保持相同的计费日期,那么接受的答案就是解决方案。

如果您需要将结算周期提前到更改日期,一个更简单的解决方案是在更新订阅时简单地将“billing_cycle_anchor”设置为“now”。 Stripe 将立即向用户收费并申请并按比例分配。

python 中的例子

stripe.Subscription.modify(
  subscription_id,
  billing_cycle_anchor = 'now',
  ......
)

答案 3 :(得分:0)

您还可以将 proration_behavior 设置为 always_invoice,Stripe 将应用比例分配并立即向您的客户 (source) 开具发票。

以下是 curl 的示例:

curl https://api.stripe.com/v1/subscriptions/sub_HE... \
  -u "sk_test_MI...:" \
  -d "items[0][id]=si_Il3Z..." \
  -d "items[0][quantity]"=2 \
  -d "proration_behavior=always_invoice"