【问题标题】:PHP - Understanding timestamp argument (usage records)PHP - 了解时间戳参数(使用记录)
【发布时间】:2019-03-26 20:29:03
【问题描述】:

我正在尝试设置即将开具的发票,以便通过条带进行计量计费。为此,我需要运行使用记录。我的理解是,需要运行使用记录才能生成准确的即将到来的发票。我创建了一个名为stripeUsageRecord() 的函数,我在生成发票之前调用了它。

  public function stripeUsageRecord()
  {
    $authUser = auth()->user();
    $sub_item = $authUser['subscription_item'];
    \Stripe\Stripe::setApiKey(env("STRIPE_SECRET"));
    return \Stripe\UsageRecord::create(array(
      "quantity" => 11,
      // "timestamp" => time(),
      "timestamp" => 1540225312,
      "subscription_item" => $sub_item,
      "action" => "set"
    ));
  }

这个函数确实实现了它想要的结果。我遇到的唯一问题是我无法动态设置时间戳。如果我运行静态时间戳(在订阅日期范围内),它会按照我想要的方式工作,而不是增加它。但是如果我使用 php time() 将时间戳设置为当前时间,它会增加数量(当我需要它来更新它时)。

(在我的代码中,数量由一个查询确定,该查询计算订阅时间范围内在该位置购物的所有用户。这里我只是添加一个数字,这样更容易理解。)

如何设置时间戳以动态更新数量,而不是将其添加到使用不同时间戳运行的先前使用记录之上?

【问题讨论】:

  • 我对这个API一无所知,但是如果你想更新一些东西,你不应该使用一个名为create()的函数吗?如果您在使用某些代码时遇到问题,请发布它。不要在代码中不起作用的部分“只添加一个数字”。
  • set 将覆盖给定时间戳的使用量。如果您创建的新记录具有不同的时间戳,您是对的,它只会添加到期末收费的总额中,而不是覆盖。您可以使用选项aggregate_usage=last_during_period 设置基础计划,以便在最终发票上仅使用时间戳的最后一条记录
  • @duck 你是对的。做了这些改变,它奏效了。如果您将其添加为答案,我会将其标记为正确。

标签: php stripe-payments unix-timestamp


【解决方案1】:

创建UsageRecord 时,set 将覆盖给定时间戳的使用量。如果您创建的新记录具有不同的时间戳,它只会添加到期末要收费的总额中,而不是覆盖。

解决此问题的方法是您可以使用选项aggregate_usage=last_during_period 设置基础计划,以便在最终发票上仅使用时间戳的最后一条记录!

类似这样的:

\Stripe\Plan::create(array(
  "amount" => 100,
  "interval" => "month",
  "product" => array(
    "name" => "Gold Metered"
  ),
  "currency" => "usd",
  "id" => "gold-metered",
  "usage_type" => "metered",
  "aggregate_usage" => "last_during_period"
));

更多上下文在这里: https://stripe.com/docs/billing/subscriptions/metered-billing#reporting-usage

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    相关资源
    最近更新 更多