Confirmations
如何在 PHP 中監控交易地址和 1 次確認?
我有一個小的 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 } }