>  기사  >  백엔드 개발  >  PHP를 사용하여 이더리움 결제 시스템을 개발하는 방법

PHP를 사용하여 이더리움 결제 시스템을 개발하는 방법

不言
不言원래의
2018-09-10 14:14:425523검색

이 글은 이더리움 시스템의 PHP 개발에 관한 것입니다. 주로 스마트 계약 개발 및 상호 작용, 계정 생성, 거래, 전송, 토큰 개발, 필터 및 이벤트 등에 대한 PHP 사용을 소개합니다.

암호화폐를 통한 결제 구현을 처음 생각할 때 Stripe과 같은 사용 가능한 솔루션을 살펴보았습니다. 내 생각에 Stripe의 문제점은 미국 판매자 계정을 통해서만 비트코인 ​​결제를 허용한다는 점인데, 그래서 그것은 나에게 선택 사항이 아닙니다. Ethereum 세계에서는 상황이 더욱 악화됩니다. 몇 가지 새로운 서비스가 있지만 그들은 모두 케이크를 공유하고 싶어합니다.

이더리움 결제 시스템을 처음부터 구축하려면 무엇이 필요합니까?

  • PHP를 실행하는 웹 서버.

  • RPC가 활성화된 개인 네트워크에 있는 하나 이상의 패리티 노드.

  • vanity-eth와 같은 웹 서버의 가상 주소 생성기입니다.

그럼 어떻게 작동하나요?

  • coinbase 또는 kraken API의 현재 가격을 사용하여 ETH 가격을 계산합니다.

  • 가상 생성기를 사용하여 주소 쌍을 생성하고 개인 키를 암호화하거나 다른 서버로 전송하세요.

  • 생성된 주소를 고객에게 보여주고 결제가 이루어지면 몇 초마다 주소를 확인하세요.

이론적으로는 문제 없을 것 같으니 빌드해보겠습니다.

1단계: 서버 설정

nodejs에서 vanity-eth를 사용하여 주소를 생성합니다.

npm install -g vanity-eth@1.0.4"

Windows에 vanity-eth를 설치한 후:

PHP를 사용하여 이더리움 결제 시스템을 개발하는 방법

또한 일부 Etherum 노드가 필요합니다. 저는 빠르고 안정적이기 때문에 Parity를 ​​사용하고 있습니다.

다음 매개변수로 시작하되 노드를 인터넷에 직접 노출하지 말고 포트 전달 없이 방화벽 뒤에 유지하세요.

parity --jsonrpc-interface 0.0.0.0 --jsonrpc-hosts="all" --auto-update=all --jsonrpc-cors null

완전한 동기화 패리티 로그:

PHP를 사용하여 이더리움 결제 시스템을 개발하는 방법

빠른 배포를 위해 Parity 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 주소를 제공합니다. cronjob은 모든 고객 주소를 매분 확인하여 변경 사항을 감지합니다. 주소에 ETH를 추가하면 잔액이 API 할당량으로 변환되므로 고객은 자금을 추가하기 위해 사이트에 로그인할 필요조차 없습니다.

API 천국의 통합 예:

PHP를 사용하여 이더리움 결제 시스템을 개발하는 방법

또 다른 접근 방식은 고정 가격을 계산하여 사용자 세션에 저장하는 것입니다. 고객은 웹사이트에서 결제해야 하며, 수령된 결제 내역을 쿼리하려면 AJAX가 필요합니다. 전액을 받으면 백엔드가 판매를 시작합니다.

무엇보다도 웹사이트에 이더리움 결제 시스템을 통합하기 위해 외부 서비스가 필요하지 않습니다. 함께 와서 이더리움을 배우고 플레이해 보세요.

관련 권장 사항:

PHP를 사용하여 온라인 결제 시스템을 개발하는 방법

가상 도메인 이름 시스템을 개발하는 방법

위 내용은 PHP를 사용하여 이더리움 결제 시스템을 개발하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.