如果不启用按比例分配,在周期中对客户的订阅所做的任何更改都会立即生效

Without proration enabled, any changes made to a customer’s subscription mid-cycle goes into effect immediately

在使用 Braintree 实现定期付款的过程中,我遇到了一个问题。

在文档中我可以读到:“如果不启用按比例分配,在周期中对客户的订阅所做的任何更改都将在下一个周期开始时生效。” (https://articles.braintreepayments.com/guides/recurring-billing/recurring-advanced-settings#proration)

但是,如果我在计费周期的中间将订阅编辑为较低的美元金额(没有启用降级的按比例分配),例如从 100 美元到 80 美元,然后我将订阅编辑为更高的美元金额(启用升级按比例分配)例如到 90 美元,网关会立即向我收取一些费用。

在这种情况下,我希望网关不会产生任何交易,因为降级应该在下一个周期开始时生效,并且新订阅价格 ($90) 低于初始订阅价格 (100$)。

如何达到只有新订阅价格高于当前计费周期的最高订阅价格才会生成按比例升级交易的场景?

我是 Braintree 的一名开发人员。

如果您对价格下降和上涨都保持按比例分配,在您给出的示例中,您会看到订阅余额因减少而被扣除,然后费用因增加而被扣除。如果费用超过订阅余额信用,则您的客户将被收取费用。

订阅不会在计费周期中间收费,除非您选择按比例分配费用。您可以使用类似于以下的逻辑创建您想要的场景。代码片段在 Ruby 中,因为您没有指定您使用的是哪个客户端库。

首先查找您要更新的订阅并找到当前计费周期的开始日期:

subscription = Braintree::Subscription.find("subscription_id")
billing_period_start_date = Date.parse(subscription.billing_period_start_date) # convert String to Date

然后遍历订阅的status_history事件,如果历史事件发生在本计费周期开始之后并且billing_period_max_price大于billing_period_max_price,则更新billing_period_max_price上一个:

billing_period_max_price = 0.0

subscription.status_history.each do |history_event|
   event_date = Date.parse(history_event.timestamp.strftime('%Y/%m/%d')) # convert Time to Date
   event_price = history_event.price.to_f
   if event_date >= billing_period_start_date && billing_period_max_price < event_price
       billing_period_max_price = event_price
   end
end

最后,如果 billing_period_max_price 低于您想要将订阅价格更改为的价格,则按比例分配费用:

Subscription.update(
  "subscription_id", 
  :price => "yourHigherPrice",
  :options => { :prorate_charges => true }
)

如果您还有其他问题,请随时联系 Braintree support