如果未启用按比例分配,则客户订购中期周期内所做的任何更改都会立即生效

时间:2016-04-26 12:24:31

标签: braintree

在使用Braintree实施定期付款期间,我遇到了一个问题。

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

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

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

只有当新订阅价格高于当前结算周期的最高订阅价格时才会生成按比例升级的交易时,如何才能达到方案?

1 个答案:

答案 0 :(得分:0)

我是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 = 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联系。