3

这是这篇文章的后续问题,但我的问题更多与编程相关,所以我希望这是发布它的正确位置。

我也在尝试使用 BTC Pay Server 作为钱包。有两个问题:

  1. 如文章所述,您必须在创建发票时指定金额。
  2. 它有一个安全功能,基本上会导致您无法重复使用存款地址

问题 1 的解决方法是将发票金额设置为 0.000001 BTC。如此之低,以至于客户总是会多付钱。这对我有用。

但我的问题是地址不能过期。我检查了代码:

  1. 在这里您可以看到 Invoice 对象。
  2. 在这里您可以看到正在使用的代码。

看起来我可以使用这个:

public function setExpirationTime($expirationTime)
{
    if (is_a($expirationTime, 'DateTime')) {
        $this->expirationTime = $expirationTime;
    } else if (is_numeric($expirationTime)) {
        $expirationDateTime = new \DateTime('', new \DateTimeZone("UTC"));
        $expirationDateTime->setTimestamp($expirationTime);
        $this->expirationTime = $expirationDateTime;
    }
    return $this;
}

并将到期时间设置为 3000 年。所以我的问题是:

  1. 如果我尝试使用它使其永不过期,BTC Pay 服务器会丢弃我的地址吗?
  2. 如果用户发送到过期地址,我是否仍会收到资金/
  3. 或者有没有更好的方法让 BTC Pay 服务器像我想要的那样充当钱包?

谢谢!

4

1 回答 1

2
  1. 如果我尝试使用它使其永不过期,BTC Pay 服务器会丢弃我的地址吗?

实际上,如果 expireTime 的类型是 DateTime ,你可能会遇到2038 年的问题。如果确实如此,当您尝试传递大于 2038 的值时,它将被设置为负值。目前尚不清楚接下来会发生什么。

如果运行代码的系统是 64 位,则 Y2038 问题不适用。

  1. 如果用户发送到过期地址,我还会收到资金吗

https://docs.btcpayserver.org/FAQ/FAQ-Stores/#payment-invalid-if-transactions-fails-to-confirm-minutes-after-invoice-expiration

如果客户支付了发票,但未能在设定的期限内获得规定的确认次数,则将其标记为“无效”。然后,商家可以决定是手动接受发票还是拒绝发票并要求客户额外付款。这是针对波动性的额外保护机制

所以不完全是 - 如果它过期,您需要做一些工作来接受它。

  1. 或者有没有更好的方法让 BTC Pay 服务器像我想要的那样充当钱包?

与其将其设置为 3000 年,不如将发票一次设置为提前一年?

于 2020-08-22T14:48:24.220 回答