ሙሉ የ PHP ውህደትን በመጠቀም iexbase/tron-api ቤተ-መጽሐፍት። እያንዳንዱ እርምጃ ወደ ፕሮጀክትዎ መቅዳት የሚችሉት ራሱን የቻለ የኮድ ብሎክ ነው። ከማንኛውም የ PHP ማዕቀፍ ወይም ተራ PHP ጋር ይሰራል።
ቅድመ ሁኔታዎች፡ PHP 7.4+፣ አቀናባሪ፣ ext-gmp እና ext-bcmath ነቅቷል፣ የገንዘብ ድጋፍ የተደረገለት Tron ቦርሳ።
ስለ PHP መግባት፡ የ TronEnergy API የኪስ ቦርሳ ፊርማ ያስፈልገዋል tronWeb.trx.signMessageV2(). ዘ iexbase/tron-api ቤተ-መጻሕፍት ይህንን ትክክለኛ የፊርማ የመጀመሪያ ደረጃ አያጋልጥም፣ ስለዚህ ይህ መመሪያ ለመፈረም ደረጃ ትንሽ የNode.js ረዳት ይጠቀማል። የተቀረው ነገር ሁሉ ( TRX መላክ፣ API መጥራት፣ USDT መላክ) በ PHP ውስጥ ይቆያል። ትክክለኛ የ signMessageV2 ፊርማ የሚያቀርብ ንፁህ-PHP የፊርማ መፍትሄ ካለዎት፣ ሌላ ማንኛውንም እርምጃ ሳይቀይሩ ረዳቱን መቀየር ይችላሉ።
ፍሰቱ
API ቁልፍ የለም። ምዝገባ የለም። ኮድዎ TRX በሰንሰለት ወደ TronEnergy የክፍያ አድራሻ ይልካል፣ የባለቤትነት ማረጋገጫ መልእክት ይፈርማል፣ ከዚያም ውክልናውን ይጠይቃል። Energy በግምት በ3 ሰከንዶች ውስጥ ይደርሳል። ከዚያም ኮድዎ የተወከለውን ኃይል በመጠቀም USDT ይልካል።
1
TRX ላክ
አራት ወይም ከዚያ በላይ TRX ወደ የክፍያ አድራሻው (ቢያንስ 4፣ ቢበዛ 1000) ይላኩ።
2
ምልክት
ላኪው መሆንዎን ለማረጋገጥ tx_hash:delegate_ን ይፈርሙ።
3
የይገባኛል ጥያቄ
የቴክስ ሃሽ እና ፊርማ ያለው/የውክልና ስልጣን ይስጡ። Energy በ~3 ሰከንድ ውስጥ ይደርሳል።
ዋጋው መስመራዊ ነው፡ 16,250 በ TRX Energy ። 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 ቴክሱ ገና በሰንሰለት ላይ መረጃ ጠቋሚ ካልተደረገለት - ለጥቂት ሰከንዶች ይጠብቁ እና አንድ ጊዜ እንደገና ይሞክሩ።
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";
}