¿Cómo actualizar el índice cuando se recibe el pago con Blockchain PHP API?

Quiero comenzar a aceptar el pago de Bitcoins en mi sitio, recibí la devolución de llamada y el índice funciona bien, lo único es que no actualizará el índice una vez que se reciba el pago, me gustaría darle al usuario algún tipo de retroalimentación en vivo cuando se recibe el pago, ¿cómo puedo hacer eso?

A continuación se muestra lo que tengo.

Índice.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;

?>

Devolución de llamada.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.
    }

    ?>

Respuestas (1)

Su devolución de llamada actualizará su servidor, pero el usuario tendría que actualizar la página para ver el cambio, o podría usar AJAX (pero eso puede ser un desperdicio ya que enviará varias solicitudes hasta que haya una actualización). Le sugiero que use su API websocket para monitorear una transacción para que pueda notificar al usuario en vivo en la página.

A continuación se muestra un ejemplo simple, solo asegúrese de actualizar la addressvariable con la dirección que desea monitorear. Puede poner su salida de PHP en el javascript comovar 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>