w3ctech

php如何为区块链平台以太坊开发支付系统

当龙虎大战坐庄我 第一次考虑通过加密货币实施支付时,龙虎大战坐庄我 查看了像Stripe这样的可用解决方案。龙虎大战坐庄我 觉得Stripe的问题在于,它只允许使用美国商家帐户进行比特币支付,所以这对龙虎大战坐庄我 来说不是一个选择。在以太坊世界,它看起来更糟糕。有一些较新的龙虎大战坐庄服务 ,但他们都想要分享蛋糕。

那么从头开始构建以太坊支付系统,龙虎大战坐庄龙虎大战坐庄我 们 需要什么?

  • 运行PHP的Web龙虎大战坐庄服务 器。
  • 启用了RPC的专用网络中至少有一个Parity节点。
  • 网络龙虎大战坐庄服务 器上的虚拟龙虎大战坐庄地址 生成器,如vanity-eth

那它是如何工作的?

  • 使用coinbase或kraken API中的当前价格计算ETH的价格。
  • 使用虚拟生成器生成龙虎大战坐庄地址 对,并将私钥加密或转移到另一个龙虎大战坐庄服务 器。
  • 显示生成的龙虎大战坐庄地址 给客户,如果收到付款,则每隔几秒检查一次龙虎大战坐庄地址 。

理论上似乎是没有问题的,那让龙虎大战坐庄龙虎大战坐庄我 们 构建它。

第1步:设置龙虎大战坐庄服务 器

龙虎大战坐庄龙虎大战坐庄我 们 将使用nodejs中的vanity-eth来生成龙虎大战坐庄地址 。

npm install -g vanity-eth@1.0.4"

在龙虎大战坐庄Win dows上安装vanity-eth后:

还需要一些Etherum节点。龙虎大战坐庄我 正在使用Parity,因为它快速可靠。

使用这些参数启动它,但不要将节点直接暴露给Internet,将它们保留在防火墙后面而不进行端口转发。

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

完成同步的奇偶校验日志:

为了更快地部署,您可以使用Parity Docker容器。还可以保存数据,这样每次重新制作容器时都不必重新同步。

第2步:编写付款类

首先创建一个名为libs的文件夹,然后将php-ethereum repo克隆到其中。ethereum-php项目是json-rpc类的一个很好的封装。

然后龙虎大战坐庄龙虎大战坐庄我 们 使用以下类并将其另存为ethpay.php。这是支付处理的主要逻辑。龙虎大战坐庄你 可以用它来:

  • 生成龙虎大战坐庄地址 对
  • 检查余额(待定的和已完成的)
  • 从WEI转换为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('http://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 bcdiv($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));
        }
    }
}

最后一步:与您的网站集成

根据您的龙虎大战坐庄服务 ,有多种龙虎大战坐庄方法 可以执行此操作。

API Heaven,龙虎大战坐庄龙虎大战坐庄我 们 为每位客户提供一个可以存入资金的ETH龙虎大战坐庄地址 。cronjob每分钟检查所有客户龙虎大战坐庄地址 以检测更改。如果他们将ETH添加到龙虎大战坐庄地址 ,则余额将转换为API配额,因此龙虎大战坐庄龙虎大战坐庄我 们 的客户甚至不需要登录该站点来添加资金。

API Heaven中的示例集成:

另一个龙虎大战坐庄方法 是计算固定价格并将其保存在用户会话中。客户必须在网站上付款,并且您需要向AJAX查询已收到的付款。如果收到全部金额,后端会触发销售。

最重要的是,您不需要外部龙虎大战坐庄服务 来在您的网站上集成以太坊支付系统。来一起边学边玩以太坊吧。

如果龙虎大战坐庄你 想直接动手学习PHP与以太坊的实战内容,龙虎大战坐庄推荐 个教程:

php以太坊教程,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。

w3ctech微信

扫码关注w3ctech微信龙虎大战坐庄公众号

共收到0条回复