ሙሉ PHP integration ተጠቀምቶ iexbase/tron-api ቤተ-መጻሕፍት። እያንዳንዱ ደረጃ ወደ ፕሮጀክታችሁ ቅጂ ማድረግ ይችላሉ። ማንኛውም PHP framework ወይም ተራ PHP ጋር ይሰራል።
ቅድመ-ሁኔታዎች: PHP 7.4+፣ Composer፣ ext-gmp እና ext-bcmath ነቅቷል፣ የገንዘብ Tron ዋሌት።
PHP ውስጥ ስር አደረግ ስለ: TronEnergy API ዋሌት ስር አደረግ ይፈልጋል tronWeb.trx.signMessageV2()። iexbase/tron-api ቤተ-መጻሕፍት ይህ ትክክለኛ ስር አደረግ ግቤት አያውጡም፣ ስለዚህ ይህ መመሪያ ስር አደረግ ደረጃ ለአናሥ Node.js ረዳት ይጠቀማል። ሁሉም ሌሎች ነገሮች (TRX መላክ፣ API ጥሪ ማድረግ፣ USDT መላክ) PHP ውስጥ ይቆያል። ትክክለኛ signMessageV2 ስር አደረግ የሚያመርት ንጹህ-PHP ስር አደረግ መፍትሔ ካለዎ ሌሎች ደረጃዎች ሳይለወጡ ረዳቱን ዝለል።
ፍሰቱ
API ቁልፍ የለም። ምዝገባ የለም። ኮድዎ በ-ሰንሰለት TronEnergy ክፍያ አድራሻ ላይ TRX ይልካል፣ ባለቤትነት ያረጋግጥ ዘንድ ቤቱን ይፈርማል፣ ከዚያ delegation ይጠይቃል። Energy በግምት 3 ሰከንድ ውስጥ ደረሳል። ከዚያ ኮድዎ delegated energy ተጠቀምቶ USDT ይልካል።
1
TRX ላክ
ኃላፊ አድራሻ ላይ በ-ሰንሰለት 4 ወይም ከዚያ በላይ TRX ላክ (ምንቅስቃሴ 4፣ ከፍተኛ 1000)።
2
ሞዴል
tx_hash:delegate_to ስር አደረግ ምሕረተ መላክ ወራጂ መሆንዎን ለማረጋገጥ።
3
ይጠይቁ
POST /delegate ከ tx hash እና ስር አደረግ። Energy በ~3s ውስጥ ደረሳል።
ዋጋ ቀጥተኛ ነው: በ TRX ごとに 16,250 Energy። ዝቅተኛ ትዕዛዝ 4 TRX (65,000 Energy — አንድ መደበኛ USDT ዝውውር)፣ ከፍተኛ 1,000 TRX (16.25M Energy)። ለሚላክው መጠን በትክክል ተመሳሳይ መጠን Energy ዝውውር ይደረጋል — ምንም ደረጃዎች፣ ምንም ፓኬጆች። ለአንድ መደበኛ ዝውውር፣ $trxAmount = 4 ይጠቀሙ። ለአዲስ-ዋሌት ዝውውር፣ 8 ይጠቀሙ። ለጅምላ ሥራ ተጨማሪ ይጠቀሙ። ከታች ያለው ኮድ $trxAmount ተለዋዋጭ ይጠቀማል ስለዚህ በአንድ ቦታ መቀየር ይችላሉ።
ደረጃ በደረጃ
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
በጭንቅላታችሁ ምስጥሮችን አታስገብቱ። የግል ቁልፉን ከአካባቢ ተለዋዋጮች ወይም ሚስጥር አስተዳደሪ ያወርዱ። ምስጥሮችን ወደ git አይይዙ።
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 ረዳት በመጠቀም እናደርገዋለን። ወደ PHP ፋይልዎ በጎን እንደ sign.js ያስቀምጡ:
// 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,
]),
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
echo "Energy: " . $result['energy'] . "\n";
echo "Ref: " . $result['ref'] . "\n";
7. USDT ላክ
// Energy is now delegated. Send USDT.
$contract = $tron->contract($usdt);
$transfer = $contract->transfer($delegateTo, 10 * pow(10, 6));
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";
}