资讯专栏INFORMATION COLUMN

php如何开发一个以太坊支付系统?

fxp / 1141人阅读

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

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

那么从头开始构建以太坊支付系统,我们需要什么?

运行PHP的Web服务器。

启用了RPC的专用网络中至少有一个Parity节点。

网络服务器上的虚拟地址生成器,如vanity-eth。

那它是如何工作的?

使用coinbase或kraken API中的当前价格计算ETH的价格。

使用虚拟生成器生成地址对,并将私钥加密或转移到另一个服务器。

显示生成的地址给客户,如果收到付款,则每隔几秒检查一次地址。

理论上似乎是没有问题的,那让我们构建它。 第1步:设置服务器

我们将使用nodejs中的vanity-eth来生成地址。

npm install -g vanity-eth@1.0.4"

在Windows上安装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

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 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进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。

这里是我的博客原文

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30833.html

相关文章

  • php如何开发一个以太支付系统

    摘要:最重要的是,您不需要外部服务来在您的网站上集成以太坊支付系统。来一起边学边玩以太坊吧。 当我第一次考虑通过加密货币实施支付时,我查看了像Stripe这样的可用解决方案。我觉得Stripe的问题在于,它只允许使用美国商家帐户进行比特币支付,所以这对我来说不是一个选择。在以太坊世界,它看起来更糟糕。有一些较新的服务,但他们都想要分享蛋糕。 那么从头开始构建以太坊支付系统,我们需要什么? ...

    lidashuang 评论0 收藏0
  • Web程序员如何入门以太开发

    摘要:加入以太坊生态系统,一起征服世界。数字,字符串等要注意的第二件事是以太坊中的是位。一旦你掌握了这些东西,我个人会认为你是一个有能力的以太坊开发者 我经常构建使用以太坊的Web应用程序,我理所当然地认为每天都使用的是神奇的工具集。我们的生态系统正在迅速发展,我认为很多新人都感到不知所措。以太坊是一项了不起的技术,但它也是新生的,而且根本没有足够的时间让专业知识充分渗透。我希望人们知道以太...

    SwordFly 评论0 收藏0
  • Web程序员如何入门以太开发

    摘要:加入以太坊生态系统,一起征服世界。数字,字符串等要注意的第二件事是以太坊中的是位。一旦你掌握了这些东西,我个人会认为你是一个有能力的以太坊开发者 我经常构建使用以太坊的Web应用程序,我理所当然地认为每天都使用的是神奇的工具集。我们的生态系统正在迅速发展,我认为很多新人都感到不知所措。以太坊是一项了不起的技术,但它也是新生的,而且根本没有足够的时间让专业知识充分渗透。我希望人们知道以太...

    kidsamong 评论0 收藏0
  • 如何开发以太支付

    摘要:在这篇文章中,我将实现一个简单但完整的以太坊支付通道。发送者签署消息,指明该中应向接收者支付多少。以太坊,主要是针对工程师使用进行区块链以太坊开发的详解。 在这篇文章中,我将实现一个简单但完整的以太坊支付通道。支付通道使用密码签名,以安全、即时、无交易费用重复地传送Ether。 什么是支付通道? 以太坊交易提供了一种安全的方式来转账,但每个交易需要被包括在一个区块中和并被挖掘。这意味着...

    Anleb 评论0 收藏0
  • 智能合约实施指南

    摘要:在协议结束时,智能合约被视为已履行并仍存储在区块链网络中。这组条件和事件代表了最基本的一次性智能合约。智能合约用例智能合约越来越受欢迎,并已在各种区块链项目中实施。 与区块链技术一样,智能合约在商业领域也非常有价值。 为了让我们的读者彻底了解智能合约是什么以及它们如何影响现代商业的交易方式,我们准备了本指南。 集中商业模式正在给去中心化的模式让路 传统的商业关系模型都是集中式的,始终存...

    meteor199 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<