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

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

* 运行PHP的Web服务器。
* 启用了RPC的专用网络中至少有一个Parity节点。
* 网络服务器上的虚拟地址生成器,如vanity-eth <https://www.npmjs.com/package/vanity-eth>。
那它是如何工作的?

* 使用coinbase或kraken API中的当前价格计算ETH的价格。
* 使用虚拟生成器生成地址对,并将私钥加密或转移到另一个服务器。
* 显示生成的地址给客户,如果收到付款,则每隔几秒检查一次地址。
理论上似乎是没有问题的,那让我们构建它。

第1步:设置服务器

我们将使用nodejs中的vanity-eth来生成地址。
npm install -g [email protected]"
在Windows上安装vanity-eth后:



image

还需要一些Etherum节点。我正在使用Parity,因为它快速可靠。

使用这些参数启动它,但不要将节点直接暴露给Internet,将它们保留在防火墙后面而不进行端口转发。
parity --jsonrpc-interface 0.0.0.0 --jsonrpc-hosts="all" --auto-update=all
--jsonrpc-cors null
完成同步的奇偶校验日志:



image

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

第2步:编写付款类

首先创建一个名为libs的文件夹,然后将php-ethereum <https://github.com/btelle/ethereum-php>
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('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 <https://www.apiheaven.com/>
,我们为每位客户提供一个可以存入资金的ETH地址。cronjob每分钟检查所有客户地址以检测更改。如果他们将ETH添加到地址,则余额将转换为API配额,因此我们的客户甚至不需要登录该站点来添加资金。

API Heaven中的示例集成:



image

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

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

======================================================================

如果你想直接动手学习PHP与以太坊的实战内容,推荐我们的教程:

php以太坊教程 <http://xc.hubwiz.com/course/5b36629bc02e6b6a59171de3?affid=96james>
,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。

其他区块链教程:

* 以太坊入门教程
<http://xc.hubwiz.com/course/5a952991adb3847553d205d1?affid=108james>
,主要介绍智能合约与dapp应用开发,适合入门。
* 以太坊开发进阶教程
<http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6?affid=108james>
,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
* java以太坊开发教程
<http://xc.hubwiz.com/course/5b2b6e82c02e6b6a59171de2?affid=108james>
,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
* python以太坊
<http://xc.hubwiz.com/course/5b40462cc02e6b6a59171de4?affid=108james>
,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
* C#以太坊 <http://xc.hubwiz.com/course/5b6048c3c02e6b6a59171dee?affid=108james>
,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
* php比特币开发教程
<http://xc.hubwiz.com/course/5b9e779ac02e6b6a59171def?affid=108james>
,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
* java比特币开发教程
<http://xc.hubwiz.com/course/5b9e779ac02e6b6a59171def?affid=108james>
,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
* EOS入门教程
<http://xc.hubwiz.com/course/5b52c0a2c02e6b6a59171ded?affid=108james>
,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
汇智网原创翻译,转载请标明出处。这里是原文 <http://blog.hubwiz.com/2018/09/05/ethereum-php-payment/>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信