Integrasi PHP lengkap menggunakan iexbase/tron-api perpustakaan. Setiap langkah adalah blok kode mandiri yang dapat Anda salin ke proyek Anda. Bekerja dengan kerangka PHP apa pun atau PHP biasa.
Prasyarat: PHP 7.4+, Composer, ext-gmp dan ext-bcmath diaktifkan, dompet Tron yang didanai.
Tentang penandatanganan di PHP: API TronEnergy memerlukan tanda tangan dompet menggunakan tronWeb.trx.signMessageV2(). iexbase/tron-api perpustakaan tidak mengekspos primitif penandatanganan yang tepat ini, jadi panduan ini menggunakan pembantu Node.js kecil untuk langkah penandatanganan. Semua hal lain (mengirim TRX, memanggil API, mengirim USDT) tetap dalam PHP. Jika Anda memiliki solusi penandatanganan PHP murni yang menghasilkan tanda tangan signMessageV2 yang valid, Anda dapat menukar pembantu tanpa mengubah langkah lain.
Alurnya
Tidak ada kunci API. Tidak ada pendaftaran. Kode Anda mengirim TRX dalam jaringan ke alamat pembayaran TronEnergy, menandatangani pesan membuktikan kepemilikan, kemudian mengklaim delegasi. Energi tiba dalam sekitar 3 detik. Kemudian kode Anda mengirim USDT menggunakan energi yang didelegasikan.
1
Kirim TRX
Kirim 4 atau lebih TRX ke alamat pembayaran dalam jaringan (min 4, maks 1000).
2
Tanda tangan
Tandatangani tx_hash:delegate_to untuk membuktikan Anda adalah pengirimnya.
3
Klaim
POST /delegate dengan hash tx dan tanda tangan. Energi tiba dalam ~3 detik.
Harga bersifat linear: 16.250 Energy per TRX. Pesanan minimum 4 TRX (65.000 Energy — satu transfer USDT standar), maksimum 1.000 TRX (16,25 juta Energy). Jumlah yang Anda kirim menentukan dengan tepat berapa banyak Energy yang didelegasikan kembali — tanpa tingkat, tanpa paket. Untuk satu transfer standar, gunakan $trxAmount = 4. Untuk transfer dompet baru, gunakan 8. Untuk pekerjaan batch, gunakan lebih banyak. Kode di bawah menggunakan variabel $trxAmount sehingga Anda dapat mengubahnya di satu tempat.
Langkah demi Langkah
1. Instal
composer require iexbase/tron-api
2. Pengaturan
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
Jangan pernah hardcode kredensial. Muat kunci privat Anda dari variabel lingkungan atau manajer rahasia. Jangan pernah commit rahasia ke git.
4. Kirim 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. Tandatangani Pesan
API memerlukan tanda tangan yang membuktikan dompet yang sama yang mengirim TRX meminta delegasi. Kami melakukan ini dengan pembantu Node.js kecil. Simpan sebagai sign.js di sebelah file PHP Anda:
// 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); });
Instal TronWeb di folder yang sama: npm install tronweb. Kemudian panggilnya dari 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. Klaim Delegasi
// $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. Kirim USDT
// Energy is now delegated. Send USDT.
$contract = $tron->contract($usdt);
$transfer = $contract->transfer($delegateTo, 10 * pow(10, 6));
echo "USDT sent: " . $transfer . "\n";
Penanganan Kesalahan
Bungkus panggilan klaim dalam pembantu retry kecil. Kesalahan paling umum adalah payment_verification_failed ketika tx belum diindeks on-chain — tunggu beberapa detik dan coba lagi sekali.
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');
}
Contoh Lengkap
<?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";
}