【问题标题】:The date-time of invoice.created even in Stripeinvoice.created 的日期时间,即使在 Stripe 中也是如此
【发布时间】:2015-01-09 09:31:38
【问题描述】:

是否有任何方法可以确定事件invoice.created 发生的确切日期和时间,给定发票?

例如:

inv = Stripe::Invoice.retrieve(....)
# when did `invoice.created ` occurred for "inv"?

据我所知,period_end 反映了invoice.payment_succeeded 的日期时间。我想我可以取period_end 并减去 1 小时(如文档所述),但 1 小时并不是准确的时间,在我读到的某个地方是几个小时,更重要的是,可能有失败的充电尝试用户,因此他们之间可能会有额外的延迟,所以仅仅减去 1 小时并不能给我invoice.created 的确切时间

【问题讨论】:

    标签: ruby-on-rails ruby stripe-payments


    【解决方案1】:

    这里最简单的解决方案是使用 webhook 监听 invoice.created 事件并将 created 值(或至少是事件 ID)存储在您的数据库中。

    您是正确的,发票将在一小时后关闭,但只有在所有 webhook 都成功地向请求返回 200 响应代码后才会关闭。否则,网络挂钩将每小时重新发送一次,最多 3 天,直到成功关闭发票 [1]。

    您可以使用List Events API 并使用created 参数和type 按日期过滤事件,您将在其中放置invoice.created,并允许您在事后找到事件并检索created价值。

    您还可以查看 Invoice 对象上的 webhooks_delivered_at 字段,但如果您的 webhook 在首次交付时由于某种原因失败,则该字段将不起作用。

    【讨论】:

    • Stripe::Event.all 不可靠,因为它只是 30 天的列表,是吗?最好的解决方案是将所有发送的事件存储到我的数据库中,嗯?
    • 我的意思是我假设您想在收到invoice.payment_succeeded 时获得日期,这将在 30 天之前发生。如果您想显示创建日期的确切信息,我认为没有更好的方法。否则,如果您只想显示发票日期,请使用 date 字段
    • 我需要存储“invoice.created”的日期然后检索它的原因是这个stackoverflow.com/questions/27836824/…
    • 一旦您获得invoice.created,您就可以为例如 1200 个 API 调用创建发票项目。在您结束时,您为下一张发票“重置”您的柜台,并且您不在乎发票是否稍后支付。然后您将 this 日期存储在您的数据库中。如果您5天不支付手机发票,发票后拨打的电话仍会在下一张发票上计费,贵公司不会一直更新发票
    • 我没有要重置的东西,重置意味着找到可以从零开始计算 API 调用的时刻。因此,将“invoice.created”的日期存储在数据库中似乎是唯一正确的方法。
    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 2015-06-27
    • 1970-01-01
    • 2018-01-14
    • 2020-10-29
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    相关资源
    最近更新 更多