Problema al integrar el demonio de Bitcoin con PHP

He instalado los demonios de Bitcoin, Litecoin y Dogecoin en el mismo servidor. Los tres están en funcionamiento, pero el demonio de Bitcoin no responde con nada cuando ejecuto bitcoind getinfo. Puede ser problemas de red o algo por el estilo. Instalé PHP en el mismo servidor y creé un index.phparchivo en la /var/www/carpeta.

Contenido del index.phparchivo:

<?php
    include_once('Bitcoin.php');
    include_once('jsonRPCClient.php');
    $dogecoin = new jsonRPCClient('http://user:pass@localhost:8332/');
    print_r($dogecoin->getinfo());
?>

Contenido de Bitcoin.php:

<?php
    class Bitcoin (
        // @var string
        private $username;
        // @var string
        private @password;
        // @var string
        private $url;
        // @var string
        private $id;

        public function __construct($url,$username,$password)
        {
            $this->url=$url;
            $this->username = $username;
            $this->password = $password;
            $this->id = 1;
        }

        public function __call($method,$params)
        {
            $params = array_values($params);

            $request = json_encode(array(
                                       'method' =>strtolower($method),
                                       'params' => $params,
                                       'id' => $this-> id));
            $curl = curl_init();
            curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_HTTPHEADER, Array("Content type:application/json"));
            curl_setopt($curl, CURLOPT_URL, $this->url);
            curl_setopt($curl, CURLOPT_USERPWD, $this->username.":".$this->password);
            curl_setopt($curl, CURLOPT_POST, TRUE);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
            $response = curl_exec($curl);
            curl_close($curl);

            if(!$resposne)
            {
                throw new Exception('Unable to connect to '.$this->url, 0);
            }
            $response = json_decode($response,true);
        }

        Then there are a condition to throw a different error upon a different situation.

    }
@peter-mortensen que las líneas adicionales son solo para evitar escribir todas las excepciones, no era así en el archivo real

Respuestas (2)

¿Hola?

Ok, estaba buscando tutoriales en Internet sobre "cómo integrar el demonio de bitcoin con php". Se me ocurrieron muchos y ninguno de ellos me ayudó a que funcionara sin problemas, algunos arrojaron errores inesperados y extraños después de completar el 90% y algunos de ellos lo suficientemente buenos como para arrojar un error al comenzar solo lo que me ahorró tiempo y esfuerzo. Ahora que he hecho lo que estaba buscando, ¿por qué no crear un tutorial paso a paso para ayudar a otros miembros? Entonces empecemos.

Antes de comenzar, debe instalar tmux, que lo ayuda a guardar su trabajo incluso si está desconectado del vps. Para instalar tmux:

sudo apt-get install tmux

para iniciar tmux simplemente escriba tmux y para volver a la pantalla mai presione ctrl b y luego d para restaurar la sesión nuevamente escriba tmux adjuntar.

Espero que tenga Ubuntu 12.x o posterior porque eso es lo que usé para la instalación. Inicie sesión en su VPS o en la terminal de su computadora e instale las propiedades del software python escribiendo el siguiente comando:

sudo apt-get install python-software-properties

luego agregue el repositorio ppa:bitcoin/bitcoin escribiendo el siguiente comando

sudo add-apt-repository ppa:bitcoin/bitcoin

En mi caso, esto no funcionó y arrojó un error que indica que no se encontró el comando add-apt-repository. En versiones posteriores de ubuntu, este comando no se encuentra en el paquete python-software-properties, como en versiones anteriores, pero está disponible en software-properties-common. Así que lo instalé ejecutando estos comandos:

sudo aptitude install software-properties-common

Para encontrar en qué paquete existe el comando que buscamos, lo siguiente será de ayuda:

sudo apt-fille update

Desafortunadamente, en mi caso, esto tampoco se instaló, así que lo instalé ejecutando el siguiente comando:

apt-get install apt-file

Ahora recibí el mensaje "El archivo está actualizado"

Ahora ejecute sudo apt-file search add-apt-repository

Se le pedirá que confirme esta instalación, presione la tecla Intro para confirmar.

ahora corre

sudo aptitude update

y luego sudo aptitude install bitcoind

Cree un nuevo directorio escribiendo:

mkdir ~/.bitcoin
cd ~/.bitcoin

Cree un nuevo archivo dentro de este directorio llamado bitcoin.conf escribiendo: nano bitcoin.conf

inserte el siguiente código en el archivo de texto:

server=1
daemon=1
rpcuser=any_username
rpcpassword=any_password

Salga presionando ctrl+x para confirmar los cambios, presione Y y luego presione la tecla de retorno. Inicie el demonio de bitcoin escribiendo:

bitcoind

El demonio de Bitcoin ahora está instalado y en ejecución, puede verificarlo ejecutando el siguiente comando

bitcoind getinfo

Ahora instalaremos apache y php en nuestro servidor

Para instalar apache ejecutaremos el siguiente código:

sudo apt-get install apache2

una vez que apache esté instalado, verifíquelo escribiendo su dirección IP en el navegador, dirá ¡ Funciona!

ahora instalaremos php con el siguiente comando:

sudo apt-get install php5 libapache2-mod-php5

ahora navegue a la carpeta var/www y descargue jsonRPCClient.php con el siguiente comando:

wget http://pmtocoins.com/JSON-RPC_PHP_light.zip

una vez descargado, descomprímalo escribiendo: unzip JSON*.zip

no moverse al directorio por: cd json*/includes

y mueva jsonRPCClient.php a su carpeta www

ahora cree un nuevo archivo index.php en la carpeta www con el siguiente código

<?php
include_once('jsonRPCClient.php');
$bitcoin = new jsonRPCClient('http://your_username:your_password@127.0.0.1:8332/');
print_r($bitcoin->getinfo());
?>

y ya terminó, navegue a su dirección IP en el navegador, por ejemplo, 161.232.12.1/index.php

Puede consultar la lista de llamadas de la API aquí: https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_Calls_list

. Puede usar la biblioteca de pago Bitcoin-PHP de código abierto -

https://github.com/cryptoapi/Payment-Gateway

    <?
        require_once( "cryptobox.class.php" );

        $options = array( 
        "private_key" => "",        // private key from gourl.io
        "orderID"     => "your_product1_or_signuppage1_etc",
        "amountUSD"   => 2          // 2 USD
        );  

        // Initialise Payment Class
        $box1 = new Cryptobox ($options);

        // Display Payment Box or successful payment result   
        $paymentbox = $box1->display_cryptobox();

        // A. Process Received Payment
        if ($box1->is_paid()) 
        { 
            // Your code here to handle a successful cryptocoin payment
            // ...
        }  
        else $message .= "The payment has not been made yet";
    ?>
    <!DOCTYPE html>
    <html><head></head>
    <body>
    <?= $paymentbox ?>
    <?= $message ?>
    </body>
    </html>
Esto no resuelve el problema del autor de la pregunta. Quiere comunicarse con su propio demonio Bitcoin