当前位置: 首页 > 后端技术 > PHP

PHP如何开发以太坊支付系统?

时间:2023-03-29 13:47:42 PHP

当我第一次想到通过加密货币实现支付时,我查看了像Stripe这样的可用解决方案。我认为Stripe的问题在于它只允许使用美国商家账户进行比特币支付,所以这不是我的选择。在以太坊世界中,情况看起来更糟。有一些较新的服务,但他们都想分一杯羹。那么我们需要什么来从头开始构建以太坊支付系统呢?运行PHP的Web服务器。启用RPC的私有网络中至少有一个Parity节点。Web服务器上的虚拟地址生成器,例如vanity-eth。那么它是怎样工作的?使用coinbase或krakenAPI中的当前价格计算ETH的价格。使用虚拟生成器生成地址对,并将私钥加密或传输到另一台服务器。向客户端显示生成的地址,如果收到付款,每隔几秒检查一次地址。理论上看起来不错,所以让我们构建它。第1步:设置服务器我们将使用nodejs中的vanity-eth来生成地址。npminstall-gvanity-eth@1.0.4"在Windows上安装vanity-eth后:还需要一些以太坊节点。我正在使用Parity,因为它快速可靠。使用这些参数启动它,但不要暴露节点直接连接到Internet,将它们放在防火墙后面,无需端口转发。parity--jsonrpc-interface0.0.0.0--jsonrpc-hosts="all"--auto-update=all--jsonrpc-corsnull以完成同步奇偶校验测试日志:为了更快的部署,可以使用ParityDocker容器,也可以保存数据,这样就不用每次remake容器都重新sync了。第二步:编写支付类。首先创建一个名为libs的文件夹,然后把php-ethereumrepo克隆进去。ethereum-php项目是json-rpc类的一个很好的包装器。然后我们使用下面的类并将它保存为ethpay.php。这是支付处理的主要逻辑。您可以使用它来:生成地址对检查余额(待处理和已完成)从WEI转换为ETHeth=newEthereum(RPC_IP,RPC_PORT);if(!$this->eth->net_version())die('RPCERROR');}/**获取一个地址的余额,*从十六进制奇偶校验中获取余额*使用bc数学函数转换它*/functiongetBalanceOfAddress($addr){$eth_hex=$this->eth->eth_getBalance($addr,'最新的');$eth=$this->wei2eth($this->bchexdec($eth_hex));$pending_hex=$this->eth->eth_getBalance($addr,'pending');$pending=$this->wei2eth($this->bchexdec($pending_hex));返回数组('balance'=>$eth,'pending'=>$pending);}functiongetCurrentPrice($currency='USD'){$data=json_decode(file_get_contents('https://api.coinbase.com/v2/prices/ETH-'.$currency.'/spot'),true);返回$data['data']['amount'];}/**我们将使用vanityeth生成私钥对*npminstall-gvanity-eth*我们必须重新格式化输出字符串以用作JSON*/functiongenPair(){exec('vanityeth',$outputAndErrors,$返回值);$answer=内爆(NULL,$outputAndErrors);$answer=str_replace('地址:','"地址":',$answer);$answer=str_replace('privKey:','"privKey":',$answer);$answer=str_replace('\'','"',$answer);returnjson_decode($answer,true);}//以下函数用于大数转换处理functionwei2eth($wei){returnbcdiv($wei,1000000000000000000,18);}functionbchexdec($hex){if(strlen($hex)==1){returnhexdec($hex);}else{$remain=substr($hex,0,-1);$last=substr($hex,-1);returnbcadd(bcmul(16,$this->bchexdec($remain)),hexdec($last));}}}最后一步:与您的网站集成根据您的服务,有多种方法可以做到这一点在APIHeaven,我们为每个客户提供一个可以存入资金的ETH地址。一个cronjob每分钟检查所有客户地址以检测变化。如果他们向地址添加ETH,余额将转换为API配额,因此我们的客户甚至无需登录网站即可添加资金。APIHeaven中的示例集成:另一种方法是计算固定价格并将其保存在用户会话中。客户必须在网站上付款,您需要通过AJAX发送收到的付款。如果收到全部金额,后端会触发销售。最重要的是,您不需要外部服务即可在您的网站上集成以太坊支付系统。一起来学习和玩以太坊吧。如果想直接学习PHP和以太坊的实际内容,推荐我的教程:php以太坊教程,主要介绍了使用PHP进行智能合约开发交互、账户创建、交易、转账、代币开发、过滤器和事件以及很快。以下是我博客的原文