ホームページ  >  記事  >  バックエンド開発  >  phpを使ってイーサリアムの決済システムを開発する方法

phpを使ってイーサリアムの決済システムを開発する方法

不言
不言オリジナル
2018-09-10 14:14:425453ブラウズ

この記事はイーサリアム システムの PHP 開発に関するもので、主にスマート コントラクトの開発と対話、アカウントの作成、トランザクション、送金、トークンの開発、フィルターとイベントなどのための PHP の使用法を紹介します。

最初に暗号通貨による支払いの実装を検討したとき、Stripe などの利用可能なソリューションを検討しました。 Stripe の問題は、米国の販売アカウントでのみビットコイン支払いを許可していることだと思うので、それは私にとって選択肢ではありません。イーサリアムの世界では、状況はさらに悪化しているようです。新しいサービスもいくつかありますが、それらはすべてケーキを共有したいと考えています。

それでは、イーサリアム決済システムをゼロから構築するには何が必要なのでしょうか?

  • #PHP を実行する Web サーバー。

  • プライベート ネットワーク内に RPC を有効にしたパリティ ノードを少なくとも 1 つ配置します。

  • ネットワーク サーバー上の仮想アドレス ジェネレーター (vanity-eth など)。

それでは、どのように機能するのでしょうか?

  • coinbase または kraken API からの現在の価格を使用して ETH の価格を計算します。

  • ダミー ジェネレーターを使用してアドレス ペアを生成し、秘密キーを暗号化するか、別のサーバーに転送します。

  • 生成されたアドレスを顧客に表示し、支払いが受領された場合は数秒ごとにアドレスを確認します。

理論的には問題なさそうなので、作ってみましょう。

ステップ 1: サーバーをセットアップする

nodejs で vanity-eth を使用してアドレスを生成します。

npm install -g vanity-eth@1.0.4"
Windows に vanity-eth をインストールした後:

phpを使ってイーサリアムの決済システムを開発する方法

また、いくつかの Etherum ノードが必要です。高速で信頼性の高いパリティを使用しています。

これらのパラメータを使用して起動しますが、ノードをインターネットに直接公開せず、ポート転送を行わずにファイアウォールの内側に保持します。

parity --jsonrpc-interface 0.0.0.0 --jsonrpc-hosts="all" --auto-update=all --jsonrpc-cors null
完了した同期のパリティ ログ:

phpを使ってイーサリアムの決済システムを開発する方法

デプロイを高速化するために、パリティ Docker コンテナを使用できます。データを保存することもできるため、コンテナーが再作成されるたびに再同期する必要がなくなります。

ステップ 2: 支払いクラスを作成する

まず、

libs というフォルダーを作成し、その中に php-ethereum リポジトリのクローンを作成します。 ethereum-php プロジェクトは、json-rpc クラスの優れたラッパーです。

次に、次のクラスを使用し、

ethpay.php として保存します。これが支払い処理のメインロジックです。これを使用して、次のことができます。

    #アドレス ペアの生成
  • #残高の確認 (保留中および完了)
  • WEI から ETH への変換
  • <?php  
    define(&#39;RPC_IP&#39;,&#39;127.0.0.1&#39;);
    define(&#39;RPC_PORT&#39;,8545);
    require &#39;libs/ethereum-php/ethereum.php&#39;;
    $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 アドレスを各顧客に提供しています。 cron ジョブは、すべての顧客アドレスを毎分チェックして変更を検出します。アドレスに ETH を追加すると、残高が API クォータに変換されるため、顧客は資金を追加するためにサイトにログインする必要さえありません。

API Heaven への統合サンプル:

phpを使ってイーサリアムの決済システムを開発する方法もう 1 つのアプローチは、固定価格を計算してユーザー セッションに保存することです。顧客は Web サイトで支払う必要があり、AJAX を使用して受け取った支払いを照会する必要があります。全額を受け取った場合、バックエンドが販売をトリガーします。

何よりも、Web サイトにイーサリアム支払いシステムを統合するために外部サービスは必要ありません。一緒にイーサリアムを学び、遊びましょう。

関連する推奨事項:

PHP を使用してオンライン決済システムを開発する方法


仮想ドメイン名システムを開発する方法

以上がphpを使ってイーサリアムの決済システムを開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。