Maison  >  Article  >  développement back-end  >  Comment utiliser PHP pour développer le système de paiement d'Ethereum

Comment utiliser PHP pour développer le système de paiement d'Ethereum

不言
不言original
2018-09-10 14:14:425453parcourir

Cet article concerne le développement PHP du système Ethereum. Il présente principalement l'utilisation de PHP pour le développement et l'interaction de contrats intelligents, la création de comptes, les transactions, les transferts, le développement de jetons, les filtres et les événements, etc.

Quand j'ai pensé pour la première fois à mettre en œuvre des paiements via crypto-monnaie, j'ai examiné les solutions disponibles comme Stripe. Je pense que le problème avec Stripe est qu'il autorise uniquement les paiements Bitcoin avec des comptes marchands américains, ce n'est donc pas une option pour moi. Dans le monde Ethereum, la situation semble encore pire. Il existe des services plus récents mais ils veulent tous partager le gâteau.

Alors, pour créer un système de paiement Ethereum à partir de zéro, de quoi avons-nous besoin ?

  • Un serveur web exécutant PHP.

  • Au moins un nœud de parité dans un réseau privé avec RPC activé.

  • Un générateur d'adresses virtuelles sur un serveur réseau, tel que vanity-eth.

Alors, comment ça marche ?

  • Calculez le prix de l'ETH en utilisant le prix actuel de Coinbase ou de l'API Kraken.

  • Utilisez un générateur factice pour générer des paires d'adresses et crypter ou transférer la clé privée vers un autre serveur.

  • Affichez l'adresse générée au client et vérifiez l'adresse toutes les quelques secondes si le paiement est reçu.

Cela ne semble poser aucun problème en théorie, alors construisons-le.

Étape 1 : Configurer le serveur

Nous utiliserons vanity-eth dans nodejs pour générer l'adresse.

npm install -g vanity-eth@1.0.4"

Après avoir installé vanity-eth sur Windows :

Comment utiliser PHP pour développer le système de paiement dEthereum

Quelques nœuds Etherum sont également requis. J'utilise Parity parce que c'est rapide et fiable.

Démarrez-le avec ces paramètres, mais n'exposez pas les nœuds directement à Internet, gardez-les derrière un pare-feu sans redirection de port.

parity --jsonrpc-interface 0.0.0.0 --jsonrpc-hosts="all" --auto-update=all --jsonrpc-cors null

Journal de parité de la synchronisation terminée :

Comment utiliser PHP pour développer le système de paiement dEthereum

Pour un déploiement plus rapide, vous pouvez utiliser des conteneurs Parity Docker. Les données peuvent également être enregistrées afin que vous n'ayez pas à resynchroniser à chaque fois que le conteneur est refait.

Étape 2 : Écrire la classe de paiement

Créez d'abord un dossier appelé libs et clonez-y le dépôt php-ethereum. Le projet ethereum-php est un bon wrapper pour la classe json-rpc.

Ensuite, nous utilisons la classe suivante et l'enregistrons sous ethpay.php. C'est la logique principale du traitement des paiements. Vous pouvez l'utiliser pour :

  • Générer des paires d'adresses

  • Vérifier le solde (en attente et complété)

  • Convertir de WEI en ETH

<?php  
define(&#39;RPC_IP&#39;,&#39;127.0.0.1&#39;);
define(&#39;RPC_PORT&#39;,8545);
require &#39;libs/ethereum-php/ethereum.php&#39;;
$e = new EthPay();
class EthPay
{
    private $eth;
        //让我们建立与parity节点的连接
    function __construct()
    {
        $this->eth = new Ethereum(RPC_IP, RPC_PORT);
        if(!$this->eth->net_version()) die('RPC ERROR');
    }

    / *
    *得到一个地址的余额,
    *来自parity的余额以十六进制形式出现在wei中
    *使用bc数学函数转换它
    * /
    function getBalanceOfAddress($addr)
    {
        $eth_hex = $this->eth->eth_getBalance($addr, 'latest');
        $eth = $this->wei2eth($this->bchexdec($eth_hex));
        $pending_hex = $this->eth->eth_getBalance($addr, 'pending');
        $pending = $this->wei2eth($this->bchexdec($pending_hex));
        return array('balance'=>$eth,'pending'=>$pending);
    }
    function getCurrentPrice($currency='USD')
    {
        $data = json_decode(file_get_contents('https://api.coinbase.com/v2/prices/ETH-'.$currency.'/spot'),true);
        return $data['data']['amount'];
    }
    /*
    *我们将使用vanityeth生成私钥对
    * npm install -g vanity-eth
    *我们必须重新格式化输出字符串以用作JSON
    * /
    function genPair()
    {
        exec('vanityeth', $outputAndErrors, $return_value);
        $answer = implode(NULL,$outputAndErrors);
        $answer = str_replace('address:','"address":',$answer);
        $answer = str_replace('privKey:','"privKey":',$answer);
        $answer = str_replace('\'','"',$answer);
        return json_decode($answer,true);
    }
    //以下功能用于转换和处理大数字
    function wei2eth($wei)
    {
        return bcp($wei,1000000000000000000,18);
    }
    function bchexdec($hex) {
        if(strlen($hex) == 1) {
            return hexdec($hex);
        } else {
            $remain = substr($hex, 0, -1);
            $last = substr($hex, -1);
            return bcadd(bcmul(16, $this->bchexdec($remain)), hexdec($last));
        }
    }
}

Dernière étape : Intégrer à votre site Web

En fonction de votre service, il existe plusieurs façons de procéder à cette opération.

Chez API Heaven, nous fournissons à chaque client une adresse ETH où les fonds peuvent être déposés. Le cronjob vérifie toutes les adresses des clients toutes les minutes pour détecter les changements. S'ils ajoutent de l'ETH à l'adresse, le solde est converti en quota API, de sorte que nos clients n'ont même pas besoin de se connecter au site pour ajouter des fonds.

Exemple d'intégration dans API Heaven :

Comment utiliser PHP pour développer le système de paiement dEthereum

Une autre approche consiste à calculer un prix fixe et à l'enregistrer dans la session utilisateur. Le client doit payer sur le site Web et vous devez utiliser AJAX pour interroger le paiement reçu. Si le montant total est reçu, la vente est déclenchée sur le backend.

Mieux encore, vous n’avez pas besoin d’un service externe pour intégrer le système de paiement Ethereum sur votre site Web. Venez apprendre et jouer à Ethereum ensemble.

Recommandations associées :

Comment développer un système de paiement en ligne avec PHP

Comment développer un système de noms de domaine virtuels

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn