Интегратсияи пурраи PHP бо истифода аз iexbase/tron-api китобхона. Ҳар як қадам як блоки рамзии мустақил аст, ки шумо метавонед онро ба лоиҳаи худ нусхабардорӣ кунед. Бо ҳама гуна чаҳорчӯбаи PHP ё PHP-и оддӣ кор мекунад.
Пешшартҳо: PHP 7.4+, Composer, ext-gmp ва ext-bcmath фаъол аст, ҳамёни Tron бо маблағгузорӣ.
Дар бораи имзо дар PHP: API TronEnergy имзои ҳамёнро талаб мекунад, ки бо истифода аз он tronWeb.trx.signMessageV2(). Он iexbase/tron-api Китобхона ин қадами имзои дақиқро фош намекунад, аз ин рӯ, ин дастур барои қадами имзо як ёвари хурди Node.js-ро истифода мебарад. Ҳама чизҳои дигар (фиристодани TRX , даъват кардани API , фиристодани USDT ) дар PHP боқӣ мемонанд. Агар шумо як ҳалли имзои холиси PHP дошта бошед, ки имзои дурусти signMessageV2-ро тавлид мекунад, шумо метавонед ёвари худро бе тағир додани ягон қадами дигар иваз кунед.
Ҷараён
Калиди API нест. Бақайдгирӣ нест. Рамзи шумо TRX ба суроғаи пардохтии TronEnergy дар шабака мефиристад, паёмеро имзо мекунад, ки моликиятро тасдиқ мекунад ва сипас ваколатномаро талаб мекунад. Energy тақрибан дар 3 сония мерасад. Сипас, рамзи шумо бо истифода аз энергияи ваколатдоршуда USDT мефиристад.
1
TRX фиристед
4 ё зиёда TRX ба суроғаи пардохт дар шабака фиристед (ҳадди ақал 4, ҳадди аксар 1000).
2
Аломат
Барои исботи он ки шумо фиристанда ҳастед, tx_hash:delegate_to -ро имзо кунед.
3
Даъво
POST /delegate бо хэш ва имзои TX. Energy дар ~3 сония мерасад.
Нархгузорӣ хаттӣ аст: 16,250 Energy барои TRX . Minimum order 4 TRX (65,000 Energy — one standard USDT transfer), maximum 1,000 TRX (16.25M Energy). The amount you send determines exactly how much Energy is delegated back — no tiers, no packages. For a single standard transfer, use $trxAmount = 4. For a new-wallet transfer, use 8. For batch work, use more. The code below uses a $trxAmount variable so you can change it in one place.
Қадам ба қадам
1. Насб кунед
composer require iexbase/tron-api
2. Танзимот
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
Ҳеҷ гоҳ эътимодномаро сахт рамзгузорӣ накунед. Use environment variables or a secrets manager. The example above is for illustration only.
3. Гирифтани маълумоти пардохт (ихтиёрӣ)
// 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. 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. Паёмро имзо кунед
API имзоеро талаб мекунад, ки исбот мекунад, ки ҳамон ҳамёне, ки TRX фиристодааст, дархости намояндагиро мекунад. Мо ин корро бо як ёвари хурди Node.js анҷом медиҳем. Онро ҳамчун захира кунед. sign.js дар паҳлӯи файли PHP-и шумо:
// 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); });
TronWeb дар ҳамон ҷузвдон насб кунед: npm install tronwebПас онро аз 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. Даъвои намояндагӣ
// $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,
]),
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$result = json_decode($response, true);
if (isset($result['error'])) {
throw new Exception("Delegation failed: " . $result['message']);
}
echo "Delegated: " . $result['energy'] . " energy\n";
echo "Ref: " . $result['ref'] . "\n";
7. USDT фиристед
// Send USDT using the delegated energy
$usdtContract = $tron->contract($usdt);
// Amount in smallest unit (6 decimals for USDT)
// 10 USDT = 10 * 1,000,000 = 10000000
$amount = 10 * pow(10, 6);
$recipient = 'TRecipientAddress';
$transfer = $usdtContract->transfer($recipient, $amount);
echo "USDT sent: " . $transfer . "\n";
Коркарди хатогиҳо
Даъвати даъворо дар ёвари хурди такрорӣ печонед. Хатои маъмултарин ин аст payment_verification_failed вақте ки tx ҳанӯз дар занҷир индексатсия нашудааст - чанд сония интизор шавед ва як маротиба такрор кунед.
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');
}
Намунаи пурра
<?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";
}