如何利用php開發以太坊的支付系統

來源:互聯網
上載者:User
本文是php開發以太坊系統,主要是介紹使用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"

在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

<?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));        }    }}

最後一步:與您的網站集合成

根據您的服務,有多種方法可以執行此操作。

在API Heaven,我們為每位客戶提供一個可以存入資金的ETH地址。cronjob每分鐘檢查所有客戶地址以檢測更改。如果他們將ETH添加到地址,則餘額將轉換為API配額,因此我們的客戶甚至不需要登入該網站來添加資金。

API Heaven中的樣本整合:

另一個方法是計算固定價格並將其儲存在使用者會話中。客戶必須在網站上付款,並且您需要向AJAX查詢已收到的付款。如果收到全部金額,後端會觸發銷售。

最重要的是,您不需要外部服務來在您的網站上整合以太坊支付系統。來一起邊學邊玩以太坊吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.