This website uses cookies to ensure you get the best experience. ❤️
OK

Integrazione con PRIZM

Il sistema di pagamento PRIZM è il modo più semplice per ricevere e inviare pagamenti crittografici.

Prizm paramining, парамайнинг, призм парамайнинг, paratax, паратакс, параметры парамайнинга

PRIZM Servlet

Prizm Paramining
факторы парамайнинга
paratax, паратакс
парамайнинг призм
prizm space

Descrizione

Esempio di implementazione di PHP

Il principio di base del lavoro

Esempi di funzioni

la lezione
Integrazione del sistema di pagamento Prizm
Per iniziare a lavorare con PRIZM è necessario avviare il nodo di rete (nodo) e API_Servlet.
Nodo di rete

PrizmCore wallet
Easy API Gateway

Il software può essere eseguito su un server e su server diversi. Tuttavia è meglio lanciarlo su quello per la vostra convenienza.


In primo luogo, è necessario avviare il nodo e attendere la sincronizzazione. Il passaggio successivo è la configurazione del modulo PrizmAPIServlet.


All'interno dell'archivio c'è un file chiamato PrizmAPIServlet.properties

  • nella passphrase della riga: NONE

invece di NONE è necessario scrivere la chiave privata del portafoglio che verrà utilizzato dal progetto.

  • nella riga sendkey: NONE

invece di NONE si dovrebbe scrivere la password (verrà utilizzata dalla funzione di invio di monete come protezione aggiuntiva da transazioni non autorizzate).

Dopo aver compilato i campi, è necessario avviare il servlet tramite
run-servlet.sh

L'esempio di attuazione in PHP

La descrizione del lavoro con la ricezione e l'invio di monete, con esempi di funzioni già pronte e la descrizione dei principi di lavoro. Il database Mysql viene utilizzato per archiviare l'elenco delle transazioni, è presente un dump della tabella di archiviazione riportata di seguito, insieme a esempi di codice da utilizzare con la tabella (se si applica QueryBuilder, non sarà un problema).

Il principio principale del lavoro:

C'è uno script nel Cron-task che fa una richiesta al servlet ogni 2-5 minuti in modo che possa ricevere nuove transazioni sul portafoglio del negozio. Dopo aver ricevuto l'elenco delle transazioni, è necessario salvarle nel database locale. Se nel database non sono presenti operazioni, è necessario eseguire il comando senza alcun parametro. Tuttavia, se si desidera ricevere nuove transazioni, è necessario inviare il numero dell'ultima transazione di cui si dispone come parametro.


L'esempio della funzione:

<?php
function historyPZM($last_id = 0)
{
	if ($last_id) {
		$url = 'http://localhost:8888/history?fromid=' . $last_id;
	} else {
		$url = 'http://localhost:8888/history';
	}
	$page = '';
	$result = get_web_page($url);
	if (($result['errno'] != 0) || ($result['http_code'] != 200)) {
		$error = $result['errmsg'];
	} else {
		$page = $result['content'];
	}
	$array_new = array();
	$xcmorewrite = explode("\n", str_replace("\r", '', $page));
	foreach ($xcmorewrite as $value) {
		if ($value) {
			$array_new[] = explode(";", $value);
		}
	}
	return $array_new;
}

?>

La funzione per il recupero del contenuto della pagina:

<?php

function get_web_page($url)
{
	$uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14";
	$ch = curl_init($url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // recupera la pagina web
               curl_setopt($ch, CURLOPT_HEADER, 0); // non recupera le intestazioni
               curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // segue reindirizzamenti
              curl_setopt($ch, CURLOPT_ENCODING, ""); // gestisce tutte le codifiche
              curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // agente utente
              curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); // timeout della connessione
             curl_setopt($ch, CURLOPT_TIMEOUT, 20); // time-out della risposta
             curl_setopt($ch, CURLOPT_MAXREDIRS, 2); // si ferma dopo il decimo eindirizzamento


           $content = curl_exec($ch);
	$err = curl_errno($ch);
	$errmsg = curl_error($ch);
	$header = curl_getinfo($ch);
	curl_close($ch);

	$header['errno'] = $err;
	$header['errmsg'] = $errmsg;
	$header['content'] = $content;
	return $header;
}

?>

È possibile testarlo tramite la console, ad esempio: curl http://localhost:8888/history

Esempio dello script del gestore dell'attività Cron per la ricezione di nuove transazioni e della struttura della tabella

CREATE TABLE `pzm_history` (
  `id` bigint(20) NOT NULL,
  `tarif_id` int(1) NOT NULL,
  `tr_id` varchar(255) NOT NULL,
  `tr_date` varchar(255) NOT NULL,
  `tr_timestamp` int(11) NOT NULL,
  `pzm` varchar(50) NOT NULL,
  `summa` decimal(16,2) NOT NULL,
  `mess` varchar(255) NOT NULL,
  `status` int(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


* Tutte le chiavi necessarie e l'incremento automatico per ID devono essere aggiunti alla tabella


Addestratore:

<?php

$nomer = getLastPrmHistory();
$historys = historyPZM($nomer);

foreach ($historys as $item) {
    if ($item['0'] != "No transactions!") {


// questa riga aggiunge dati alla tabella 'pzm_history' utilizzando INSERT IGNORE



PzmHistory::find()->insertIgnore([
            'tr_id' => $item['0'],
            'tr_date' => $item['1'],
            'tr_timestamp' => $item['2'],
            'pzm' => $item['3'],
            'summa' => $item['4'],
            'mess' => $item['5'],
            'status' => 0
        ]);
    }
}


function getLastPrmHistory()
{

// questa riga cerca l'ultima riga della tabella per ottenere l'ultimo ID delle transazioni presenti nella tabella

if (!empty($pzmHistory = PzmHistory::find()->orderBy('id', "DESC")->first())) {
		return $pzmHistory->tr_id;            
	};
	return 0;
}

?>


In questo esempio viene visualizzato l'elenco delle nuove transazioni che devono essere salvate nel database locale.

Pertanto, si mantiene una cronologia di tutte le transazioni sul portafoglio e in futuro si cercherà nel nostro database locale utilizzando i dati chiave.


Il progetto deve funzionare con lo stesso Portafoglio Prizm, per questo a tutti i clienti verranno forniti gli stessi requisiti per rifornire il conto interno e lo stesso ID hash dell'operazione. Assicurarsi di informare il cliente che deve effettuare una transazione rigorosamente sui requisiti che indicano l'identificatore hash nel commento di pagamento.

Così, ci dovrebbe essere un altro processo che analizzerà le nuove transazioni in entrata e depositare monete sul conto interno se il commento di pagamento ha un identificatore hash del cliente. Inoltre è necessario fare un pulsante separato 'Ho pagato' per il cliente che potrebbe cercare e registrare nuove transazioni per questo utente dopo aver fatto clic su di esso.

Funzioni secondarie e funzioni di invio di monete
Ottenere la chiave pubblica per il portafoglio (funziona solo per i portafogli attivati con equilibrio).

<?php
	
	function destinationPZM($pzm)
    {
        $url = 'http://localhost:8888/publickey?destination=' . $pzm;
        $page = '';
        $result = get_web_page($url);
        if (($result['errno'] != 0) || ($result['http_code'] != 200)) {
            $error = $result['errmsg'];
            return '';
        } else {
            $page = $result['content'];
            $haystack = "Public key absent";
            $haystack2 = "Send error!";
            $pos = strripos($page, $haystack);
            $pos2 = strripos($page, $haystack2);
            if ($pos === false AND $pos2 === false) {
                $xcmorewrite = explode(' ', $page);
                $page = trim($xcmorewrite[0]);
                return $page;
            } else {
                return '';
            }
        }
        return $page;
    }

?>

Ricezione del saldo attuale del portafoglio:

<?php

	function getBalancePZM($pzm)
    {
        $ip = '*******';  // Esempio 192.168.1.1:9976  con porta
		$url = 'http://'.$ip.'/prizm?requestType=getAccount&account=' . $pzm;
        $page = '';
        $result = get_web_page($url);
		//print_r($result); die;
        if (($result['errno'] != 0) || ($result['http_code'] != 200)) {
            $error = $result['errmsg'];
            return '';
        } else {
            $page = $result['content'];
            $page = json_decode($page, true);
            if ( isset($page['balanceNQT']) ) {
              return $page['balanceNQT'] / 100;
            } else {
              return 0;
            }
        }
    }

?>

Metodo di invio della moneta:

<?php

public function payPZM($summa, $pzm, $public_key, $text)
{
	$p2 = SENDKEY;   //  questa è la parola d'ordine specificata durante l'installazione

	$return = false;
	$url = 'http://localhost:8888/send?sendkey=' . $p2 . '&amount=' . $summa . '&comment=' . urlencode($text) . '&destination=' . $pzm . '&publickey=' . $public_key;
	$page = '';
	$result = get_web_page($url);

	if (($result['errno'] != 0) || ($result['http_code'] != 200)) {
		$error = $result['errmsg'];
	} else {
		$page = $result['content'];
	}

	if (preg_match('/^\+?\d+$/', $page)) {
		$return = true;
	} else {
		$return = false;
	}
	return $return;
}

?>