1. 程式人生 > >用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 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進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和事件等內容。

其他區塊鏈教程:

  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和事件等。
  • web3j教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
  • 以太坊教程,主要介紹智慧合約與dapp應用開發,適合入門。
  • 以太坊開發,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • EOS智慧合約與DApp開發入門教程,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後運用react和各知識點完成一個便籤DApp的開發。

匯智網原創翻譯,轉載請標明出處。這裡是原文