Confirmations

如何在 PHP 中監控交易地址和 1 次確認?

  • August 4, 2016

我有一個小的 PHP 腳本,上面顯示了我的靜態比特幣地址。當有人向該地址發送任何 btc 時,我如何讓 PHP 腳本檢查交易是否有 1 次確認?我是否必須在 cron 上執行一些東西才能讓它每秒檢查一次?或者在 PHP 中有另一種優雅的方法嗎?有什麼例子嗎?

Cron 作業和第 3 方 API:

您可以嘗試使用 cron 作業,但我不會每秒都執行它,這相當詳盡。可能每 5 或 10 分鐘一次,然後讓它使用數據庫檢查目前收到的總金額與之前的金額。

$addy = "1somebitcoinaddress";
$bcinfo = json_decode(file_get_contents("https://blockchain.info/address/".$addy."?format=json"), true);
$balance = $bcinfo["total_received"];
$query = $db->prepare("SELECT previous_balance FROM address WHERE address = :addy");
$query->bindParam(':addy', $addy);
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);
$prevBal = $result["previous_balance"];
  if($balance > $prevBal){
  //balance changed, do something
  }

不過,這種方式似乎不夠優雅,而且也不是一蹴而就的。

第 3 方網路鉤子:

更好的方法是使用 webhook。Blocktrail提供免費的 webhook 服務,您甚至可以在創建帳戶後在其 UI 中完成所有操作。只需註冊為開發人員,然後登錄後點擊 webhook 選項卡,然後創建一個新的 webhook 來監控您的比特幣地址。它會要求一個回調 url,你可以在其中提供一個連結到你的 PHP 腳本來執行。當您提供回調 url 時,我會添加一個秘密來幫助防止未經授權的呼叫,例如:yourdomain.com/callback.php?secret=12345

您的回調 PHP 腳本可能如下所示:

$secret = "12345";
$verify = $_GET["secret"];
if($secret != $verify){
die();
}

$data = json_decode(file_get_contents("php://input"), true);

//get estimated value of transaction
$amount = $data["data"]["estimated_value"];
$confirm = $data["data"]["confirmations"];

if($confirm >= 1){
//do something, like send an email notification
$email = "your@email.com";
$sub = "New Transaction";
$body = "Amount: ".$amount;
mail($email, $sub, $body);
}

比特幣和錢包通知:

最後,執行 bitcoind 並使用 walletnotify。

確保您正在監控的地址已導入您的 bitcoind 錢包。在你的 bitcoin.conf 中設置錢包通知

walletnotify=curl https://yourwebsite.com/script.php?txid=%s

現在,只要您的 bitcoind 錢包上有活動,您的腳本就會執行,交易 ID 儲存在 GET 下["txid"],然後您可以執行如下腳本:

require("easybitcoin.php");
$bitcoin = new Bitcoin("someusername", "somepassword");

$txid = $_GET["tx"];
$txinfo = $bitcoin->gettransaction($txid);
$details = count($txinfo["details"]);

for($i=0;$i<$details;$i++){
$check = $txinfo["details"][$i]["address"];
$addy = "1SomeAddressToMonitor";
   if($check == $addy){
   //activity on your address, do something
   }
}

引用自:https://bitcoin.stackexchange.com/questions/44373