Bắt đầu với TheRPC
Tham khảo API
Ethereum API
Core API
Hướng dẫn

PHP Tools

PHP developers can use Web3.php library for Ethereum development, enabling integration with web applications.

Chú ý!
Xin chào! Lưu ý thân thiện: trang này nhằm cung cấp cho bạn tổng quan chi tiết về việc làm việc với PHP các yêu cầu. Đối với ví dụ mã thực tế, hãy xem API Methods documentation nơi bạn sẽ tìm thấy các ví dụ sẵn sàng sử dụng trong tất cả các ngôn ngữ được hỗ trợ!

# Web3.php

PHP interface for interacting with Ethereum nodes.

<?php

use Web3\Web3;
use Web3\Providers\HttpProvider;
use Web3\RequestManagers\HttpRequestManager;

class EthereumService
{
    private $web3;

    public function __construct(string $nodeUrl)
    {
        $this->web3 = new Web3(new HttpProvider(new HttpRequestManager($nodeUrl)));
    }

    public function getBalance(string $address): string
    {
        $balance = null;
        $this->web3->eth->getBalance($address, 'latest', function ($err, $result) use (&$balance) {
            if ($err !== null) {
                throw new Exception($err->getMessage());
            }
            $balance = $result;
        });

        return $this->web3->utils->fromWei($balance, 'ether');
    }

    public function sendTransaction(array $transaction): string
    {
        $hash = null;
        $this->web3->eth->sendTransaction($transaction, function ($err, $result) use (&$hash) {
            if ($err !== null) {
                throw new Exception($err->getMessage());
            }
            $hash = $result;
        });

        return $hash;
    }
}
  • GitHub: web3.php
  • Packagist: web3.php package
  • Features:
    • JSON-RPC support
    • Contract interactions
    • Transaction handling
    • ETH unit conversion
    • ABI encoding/decoding

# Laravel Integration

Example of Laravel integration:

<?php

namespace App\Services;

use Web3\Web3;
use Illuminate\Support\Facades\Cache;

class EthereumService
{
    private $web3;

    public function __construct()
    {
        $this->web3 = new Web3(config('services.ethereum.node_url'));
    }

    public function getCachedBalance(string $address): string
    {
        return Cache::remember("eth_balance_{$address}", 300, function () use ($address) {
            return $this->getBalance($address);
        });
    }

    public function getTransactionCount(string $address): int
    {
        $count = null;
        $this->web3->eth->getTransactionCount($address, 'latest', function ($err, $result) use (&$count) {
            if ($err !== null) {
                throw new Exception($err->getMessage());
            }
            $count = hexdec($result);
        });

        return $count;
    }
}

# Smart Contract Integration

Working with smart contracts in PHP:

<?php

use Web3\Contract;

class SmartContractService
{
    private $contract;

    public function __construct(string $nodeUrl, string $abi, string $contractAddress)
    {
        $web3 = new Web3(new HttpProvider(new HttpRequestManager($nodeUrl)));
        $this->contract = new Contract($web3->provider, $abi);
        $this->contract->at($contractAddress);
    }

    public function callMethod(string $method, array $params = [])
    {
        $result = null;
        $this->contract->call($method, $params, function ($err, $response) use (&$result) {
            if ($err !== null) {
                throw new Exception($err->getMessage());
            }
            $result = $response;
        });

        return $result;
    }
}

# Error Handling

Proper error handling in PHP:

<?php

class EthereumException extends Exception
{
    private $ethError;

    public function __construct(string $message, $ethError = null)
    {
        parent::__construct($message);
        $this->ethError = $ethError;
    }

    public function getEthError()
    {
        return $this->ethError;
    }
}

class SafeEthereumService
{
    public function safeGetBalance(string $address): string
    {
        try {
            return $this->getBalance($address);
        } catch (Exception $e) {
            throw new EthereumException(
                "Failed to get balance for address: {$address}",
                $e
            );
        }
    }
}

See also

Giúp chúng tôi trở nên tốt hơn!
Chia sẻ trang này và giúp chúng tôi tạo ra sản phẩm tốt hơn cho bạn.