Wie aktualisiere ich den Index, wenn eine Zahlung mit der Blockchain PHP API eingegangen ist?

Ich möchte anfangen, Bitcoins-Zahlungen auf meiner Website zu akzeptieren, ich habe den Rückruf erhalten und der Index funktioniert einwandfrei, das einzige ist, dass der Index nicht aktualisiert wird, sobald die Zahlung eingegangen ist, ich möchte dem Benutzer eine Art von geben Live-Feedback bei Zahlungseingang, wie kann ich das machen?

Unten ist, was ich bekommen habe.

Index.php

<?php

$api_key = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx";

$xpub = "xpubxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

$secret = "xxxxxxxxxxxxxxxxxxxx";

$rootURL = "https://xxxxxxxxxx.org/BlockChain";

$orderID = uniqid();

$callback_url = $rootURL . "/callback.php?invoice=" . $orderID . "&secret=" . $secret . "&username=Teste" . "&password=qwerty123";
$receive_url = "https://api.blockchain.info/v2/receive?key=" . $api_key . "&xpub=" . $xpub . "&callback=" . urlencode($callback_url);

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $receive_url);
$ccc = curl_exec($ch);

$json = json_decode($ccc, true);

$payTo = $json['address'];

 echo $payTo;

?>

Rückruf.php

    $secret = "xxxxxxxxxxxxxxxxxxxx";

    if ($_GET['secret'] != $secret) {
        die("Stop doing that!");
    }

    else {
        //Register new user, insert more days, etc...

        //# START DEBUG #
        $fff = fopen("text.txt", "w");
        $value = $_GET['value'] . " - ";
        $fw = fwrite($fff, $value);

        $txhash = $_GET['transaction_hash'] . " - ";
        $fw = fwrite($fff, $txhash);

        $invoice = $_GET['invoice'] . " - ";
        $fw = fwrite($fff, $invoice);

        $value_in_btc = $_GET['value'] / 100000000 . " - ";
        $fw = fwrite($fff, $value_in_btc);

        $username = $_GET['username'] . " - ";
        $fw = fwrite($fff, $username);

        $password = $_GET['password'] . " - ";
        $fw = fwrite($fff, $password);

        fclose($fff);
        //# END DEBUG #

        echo "*ok*"; //Tell blockchain everything is ok, so they stop.
    }

    ?>

Antworten (1)

Ihr Rückruf aktualisiert Ihren Server, aber der Benutzer müsste die Seite aktualisieren, um die Änderung zu sehen, oder Sie könnten AJAX verwenden (aber das kann verschwenderisch sein, da es mehrere Anfragen sendet, bis es eine Aktualisierung gibt). Ich würde vorschlagen, dass Sie ihre Websocket-API verwenden, um eine Transaktion zu überwachen, damit Sie den Benutzer live auf der Seite benachrichtigen können.

Unten ist ein einfaches Beispiel, stellen Sie nur sicher, dass Sie die addressVariable mit der Adresse aktualisieren, die Sie überwachen möchten. Sie können Ihre PHP-Ausgabe wie in Javascript einfügenvar address = <?php echo $payTo; ?>;

<html>
User Page<br>
<div id="notifications">Waiting for Payment...</div>
<script>
var address = "BTC_ADDRESS_TO_MONITOR";
var btcs = new WebSocket('wss://ws.blockchain.info/inv');
btcs.onopen = function(){
    btcs.send(JSON.stringify({"op":"addr_sub", "addr":address}));
};
btcs.onmessage = function(onmsg)
{
  var response = JSON.parse(onmsg.data);
  var getOuts = response.x.out;
  var countOuts = getOuts.length; 
  for(i = 0; i < countOuts; i++)
  {
    //check every output to see if it matches specified address
    var outAdd = response.x.out[i].addr;
    var specAdd = address;
       if (outAdd == specAdd)
       {
       var amount = response.x.out[i].value;
       var calAmount = amount / 100000000;
       document.getElementById("notifications").innerHTML = "Received: " + calAmount + "BTC";
       };
  }; 
}
</script>
</html>