Tích hợp PHP đầy đủ bằng cách sử dụng iexbase/tron-api Thư viện này chứa mỗi bước là một khối mã độc lập mà bạn có thể sao chép vào dự án của mình. Nó hoạt động với bất kỳ framework PHP nào hoặc PHP thuần túy.
Điều kiện tiên quyết: PHP 7.4 trở lên, Composer, ext-gmp và ext-bcmath đã được bật, ví Tron đã được nạp tiền.
Về việc đăng nhập bằng PHP: API TronEnergy yêu cầu chữ ký ví bằng cách sử dụng tronWeb.trx.signMessageV2(). Cái iexbase/tron-api Thư viện không cung cấp chính xác cơ chế ký này, vì vậy hướng dẫn này sử dụng một đoạn mã hỗ trợ nhỏ bằng Node.js cho bước ký. Mọi thứ khác (gửi TRX , gọi API , gửi USDT ) vẫn được thực hiện bằng PHP. Nếu bạn có giải pháp ký hoàn toàn bằng PHP tạo ra chữ ký signMessageV2 hợp lệ, bạn có thể thay thế đoạn mã hỗ trợ mà không cần thay đổi bất kỳ bước nào khác.
Dòng chảy
Không cần khóa API . Không cần đăng ký. Mã của bạn sẽ gửi TRX trên chuỗi đến địa chỉ thanh toán TronEnergy , ký một tin nhắn chứng minh quyền sở hữu, sau đó yêu cầu ủy quyền. Energy sẽ đến trong khoảng 3 giây. Sau đó, mã của bạn sẽ gửi USDT bằng năng lượng đã được ủy quyền.
1
Gửi TRX
Gửi từ 4 TRX trở lên đến địa chỉ thanh toán trên chuỗi (tối thiểu 4, tối đa 1000).
2
Dấu hiệu
Ký vào tx_hash:delegate_to để chứng minh bạn là người gửi.
3
Khẳng định
Gửi yêu cầu POST /delegate kèm theo mã băm và chữ ký giao dịch. Energy sẽ được truyền đến trong khoảng 3 giây.
Giá cả được tính theo dạng tuyến tính: 16.250 Energy mỗi TRX . Đơn hàng tối thiểu 4 TRX (65.000 Energy — một giao dịch chuyển khoản USDT tiêu chuẩn), tối đa 1.000 TRX (16,25 triệu Energy ). Số lượng bạn gửi sẽ quyết định chính xác lượng Energy được hoàn trả — không có bậc thang, không có gói. Đối với một giao dịch chuyển khoản tiêu chuẩn, hãy sử dụng $trxAmount = 4Để chuyển tiền vào ví mới, hãy sử dụng... 8. Đối với công việc theo lô, hãy sử dụng nhiều hơn. Đoạn mã bên dưới sử dụng một $trxAmount Biến này cho phép bạn thay đổi nó ở cùng một chỗ.
Từng bước một
1. Cài đặt
composer require iexbase/tron-api
2. Thiết lập
require_once 'vendor/autoload.php';
use IEXBase\TronAPI\Tron;
$tron = new Tron();
$tron->setPrivateKey('YOUR_PRIVATE_KEY');
$tron->setAddress('YOUR_WALLET_ADDRESS');
$api = 'https://api.tronnrg.com';
$addr = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx'; // API payment address
$usdt = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'; // USDT contract
Không bao giờ mã hóa cứng thông tin đăng nhập. Tải khóa riêng tư của bạn từ các biến môi trường hoặc trình quản lý bí mật. Tuyệt đối không bao giờ đưa bí mật vào Git.
3. Lấy thông tin thanh toán (Tùy chọn)
// Get pricing and payment address (optional, energy is always available)
$supply = json_decode(
file_get_contents("${api}/supply"),
true
);
echo "Pay to: " . $supply['pay_to'] . "\n";
echo "Energy per TRX: " . $supply['energy_per_trx'] . "\n";
4. Gửi TRX
// Send TRX to the API payment address — pricing is linear.
// 16,250 energy per TRX. Min 4 TRX, max 1,000 TRX.
// $trxAmount = 4 → 65,000 energy (standard USDT transfer)
// $trxAmount = 8 → 130,000 energy (new wallet transfer)
// $trxAmount = 40 → 650,000 energy (10 standard transfers)
// $trxAmount = 1000 → 16,250,000 energy (max)
$trxAmount = 4;
$payment = $tron->sendTrx($addr, $trxAmount);
if (!isset($payment['result']) || !$payment['result']) {
throw new Exception('TRX transfer failed');
}
$txHash = $payment['txid'];
echo "Payment sent: ${txHash}\n";
5. Ký tên vào tin nhắn
API yêu cầu chữ ký chứng minh rằng cùng một ví đã gửi TRX cũng đang yêu cầu ủy quyền. Chúng tôi thực hiện điều này bằng một đoạn mã hỗ trợ nhỏ bằng Node.js. Hãy lưu nó dưới dạng... sign.js Bên cạnh tệp PHP của bạn:
// Usage: node sign.js <tx_hash> <delegate_to>
// Outputs the signature to stdout. Reads private key from TRON_PRIVATE_KEY env var.
const { TronWeb } = require('tronweb');
const [, , txHash, delegateTo] = process.argv;
const tronWeb = new TronWeb({
fullHost: 'https://api.trongrid.io',
privateKey: process.env.TRON_PRIVATE_KEY,
});
tronWeb.trx.signMessageV2(`${txHash}:${delegateTo}`)
.then(sig => process.stdout.write(sig))
.catch(e => { console.error(e.message); process.exit(1); });
Cài đặt TronWeb vào cùng thư mục: npm install tronwebSau đó gọi nó từ PHP:
// Both the sender (in $tron) and the signer must be the SAME wallet.
// Make sure TRON_PRIVATE_KEY in your environment matches the wallet that sent the TRX.
$delegateTo = 'TWalletThatNeedsEnergy';
$signature = trim(shell_exec(
sprintf('node sign.js %s %s',
escapeshellarg($txHash),
escapeshellarg($delegateTo)
)
));
if (!$signature) {
throw new Exception('Signing failed. Check that node and tronweb are installed and TRON_PRIVATE_KEY is set.');
}
echo "Signed: " . substr($signature, 0, 20) . "...\n";
6. Yêu cầu quyền đại biểu
// $txHash, $delegateTo, and $signature are all defined in the previous steps.
$ch = curl_init("${api}/delegate");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'tx_hash' => $txHash,
'delegate_to' => $delegateTo,
'signature' => $signature,
]),
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
echo "Energy: " . $result['energy'] . "\n";
echo "Ref: " . $result['ref'] . "\n";
7. Gửi USDT
// Energy is now delegated. Send USDT.
$contract = $tron->contract($usdt);
$transfer = $contract->transfer($delegateTo, 10 * pow(10, 6));
echo "USDT sent: " . $transfer . "\n";
Xử lý lỗi
Hãy bọc lệnh gọi xác nhận trong một hàm hỗ trợ thử lại nhỏ. Lỗi thường gặp nhất là... payment_verification_failed Khi giao dịch chưa được lập chỉ mục trên chuỗi, hãy đợi vài giây và thử lại một lần nữa.
function claimDelegation($api, $txHash, $delegateTo, $signature, $retries = 3) {
for ($i = 0; $i < $retries; $i++) {
$ch = curl_init("${api}/delegate");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'tx_hash' => $txHash,
'delegate_to' => $delegateTo,
'signature' => $signature,
]),
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (!isset($result['error'])) {
return $result; // Success
}
switch ($result['error']) {
case 'payment_verification_failed':
// Most common: tx not yet indexed. Wait and retry.
sleep(3);
continue 2;
case 'hash_already_used':
throw new Exception('This tx hash has already been claimed');
case 'signature_mismatch':
throw new Exception('Signer does not match payment sender. Sign with the same wallet that sent TRX.');
case 'delegation_failed':
// Refund queued automatically if payment was verified
throw new Exception('Delegation failed: ' . $result['message']);
default:
throw new Exception($result['message'] ?? 'Unknown error');
}
}
throw new Exception('Transaction not found after retries');
}
Ví dụ hoàn chỉnh
<?php
require_once 'vendor/autoload.php';
use IEXBase\TronAPI\Tron;
$tron = new Tron();
$tron->setPrivateKey(getenv('TRON_PRIVATE_KEY'));
$tron->setAddress(getenv('TRON_WALLET_ADDRESS'));
$api = 'https://api.tronnrg.com';
$addr = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx';
try {
$delegateTo = 'TRecipientWallet';
$trxAmount = 4; // min 4, max 1000 — energy = trxAmount × 16,250
// 1. Send TRX (linear pricing: 16,250 energy per TRX)
$payment = $tron->sendTrx($addr, $trxAmount);
$txHash = $payment['txid'];
echo "Payment: ${txHash}\n";
// 2. Sign via Node helper (see Step 5 above)
$signature = trim(shell_exec(
sprintf('node sign.js %s %s',
escapeshellarg($txHash),
escapeshellarg($delegateTo)
)
));
if (!$signature) throw new Exception('Signing failed');
// 3. Claim delegation (with retry)
$result = claimDelegation($api, $txHash, $delegateTo, $signature);
echo "Energy: " . $result['energy'] . "\n";
echo "Ref: " . $result['ref'] . "\n";
// 4. Send USDT (energy is now available)
$contract = $tron->contract('TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t');
$transfer = $contract->transfer($delegateTo, 10 * pow(10, 6));
echo "USDT sent: ${transfer}\n";
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
}