Full PHP integration gamit ang iexbase/tron-api library. Bawat step ay isang standalone code block na maaari mong i-copy sa iyong project. Gumagana sa anumang PHP framework o plain PHP.
Prerequisites: PHP 7.4+, Composer, ext-gmp at ext-bcmath enabled, isang funded Tron wallet.
Tungkol sa signing sa PHP: Ang TronEnergy API ay nangangailangan ng wallet signature gamit ang tronWeb.trx.signMessageV2(). Ang iexbase/tron-api library ay hindi nag-expose ng exact signing primitive na ito, kaya ang guide na ito ay gumagamit ng tiny Node.js helper para sa signing step. Lahat ng iba (pagpadala ng TRX, pag-call sa API, pagpadala ng USDT) ay nananatili sa PHP. Kung mayroon kang pure-PHP signing solution na gumagawa ng valid signMessageV2 signature, maaari mong palitan ang helper nang hindi binabago ang anumang ibang step.
Ang Flow
Walang API key. Walang sign-up. Ang iyong code ay nagpadala ng TRX on-chain sa TronEnergy payment address, nag-sign ng message upang patunayan ang ownership, pagkatapos ay nag-claim ng delegation. Ang energy ay darating sa loob ng humigit-kumulang 3 segundo. Pagkatapos ang iyong code ay nagpadala ng USDT gamit ang delegated energy.
1
Magpadala ng TRX
Magpadala ng 4 o higit pang TRX sa payment address on-chain (min 4, max 1000).
2
Sign
I-sign ang tx_hash:delegate_to upang patunayan na ikaw ang nagpadala.
3
Claim
POST /delegate kasama ang tx hash at signature. Ang energy ay darating sa loob ng ~3s.
Ang presyo ay linear: 16,250 Energy per TRX. Minimum order 4 TRX (65,000 Energy — isang standard USDT transfer), maximum 1,000 TRX (16.25M Energy). Ang halaga na ipinapadala mo ay tumutukoy kung gaano kalaki ang Energy na ide-delegate pabalik — walang tier, walang package. Para sa isang standard transfer, gamitin $trxAmount = 4. Para sa bagong wallet transfer, gamitin 8. Para sa batch work, gumamit ng higit pa. Ang code sa ibaba ay gumagamit ng $trxAmount variable para mabago mo ito sa isang lugar.
Hakbang sa Hakbang
1. I-install
composer require iexbase/tron-api
2. I-setup
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
Huwag i-hardcode ang credentials. I-load ang iyong private key mula sa environment variables o secrets manager. Huwag i-commit ang secrets sa git.
4. Magpadala ng 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. I-sign ang Message
Ang API ay nangangailangan ng signature na nagpapatunay na ang parehong wallet na nagpadala ng TRX ay humihiling ng delegation. Ginagawa namin ito gamit ang isang maliit na Node.js helper. I-save ito bilang sign.js sa tabi ng iyong PHP file:
// 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); });
I-install ang TronWeb sa parehong folder: npm install tronweb. Pagkatapos, tawagan ito mula sa 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. I-claim ang Delegation
// $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. Magpadala ng USDT
// Energy is now delegated. Send USDT.
$contract = $tron->contract($usdt);
$transfer = $contract->transfer($delegateTo, 10 * pow(10, 6));
echo "USDT sent: " . $transfer . "\n";
Error Handling
I-wrap ang claim call sa isang maliit na retry helper. Ang pinakakaraniwang error ay payment_verification_failed kapag ang tx ay hindi pa indexed on-chain — maghintay ng ilang segundo at subukan muli.
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');
}
Kumpletong Halimbawa
<?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";
}