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.
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.
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 :
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 :
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.
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('RPC_IP','127.0.0.1'); define('RPC_PORT',8545); require 'libs/ethereum-php/ethereum.php'; $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)); } } }
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 :
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!