PHP - 理解时间戳参数(使用记录)

PHP - Understanding timestamp argument (usage records)

我正在尝试为来自条带的计量计费设置即将到来的发票。为此,我需要 运行 使用记录。我的理解是使用记录需要 运行 才能生成准确的即将开出的发票。我创建了一个名为 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"
    ));
  }

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

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

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

创建 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