Cron Jobs and 3rd Party API:
You could try with cron jobs, but I wouldn't run it every second, that's rather exhaustive. Maybe every 5 or 10 minutes, and then have it check the current total received vs the previous amount using a database.
$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
}
That way seems rather less than elegant though, and it's not instant.
3rd Party Webhook:
A better way would be with a webhook. Blocktrail offers a free webhook service, and you can even do it all in their UI after creating an account. Just sign up as a developer, then once logged in click on the webhooks tab and then create a new webhook that monitors your bitcoin address. It will ask for a callback url, that's where you provide a link to your PHP script to run. When you provide the callback url I would add a secret to help prevent unauthorized calls like: yourdomain.com/callback.php?secret=12345
Your callback PHP script can look something like this:
$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 and Wallet Notify:
Lastly, there's run bitcoind and use walletnotify.
Make sure the address you are monitoring is imported into your bitcoind wallet. Set wallet notify up in your bitcoin.conf
walletnotify=curl https://yourwebsite.com/script.php?txid=%s
Now anytime there is activity on your bitcoind wallet your script will run, with the transaction id stored in a GET under ["txid"] and then you can do a script like:
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
}
}
Not sure if Blocktrail still operates as it used to, but I've personally used both https://www.blockchainwebhooks.com/ and https://blockcypher.com for webhooks - both work reliably and have free plans
– sizzlecookie – 2018-08-04T00:25:14.413