ব্যবহার করে সম্পূর্ণ PHP ইন্টিগ্রেশন iexbase/tron-api লাইব্রেরি। প্রতিটি ধাপ একটি স্বাধীন কোড ব্লক যা আপনি আপনার প্রকল্পে কপি করতে পারেন। যেকোনো PHP ফ্রেমওয়ার্ক বা সাধারণ 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-তে থাকে। যদি আপনার কাছে একটি খাঁটি-PHP স্বাক্ষর সমাধান থাকে যা একটি বৈধ signMessageV2 স্বাক্ষর তৈরি করে, আপনি অন্য কোন ধাপ পরিবর্তন না করে সহায়ককে প্রতিস্থাপন করতে পারেন।
প্রবাহ
কোন API কী নেই। কোন সাইন-আপ নেই। আপনার কোড TronEnergy পেমেন্ট অ্যাড্রেসে অন-চেইন TRX পাঠায়, মালিকানা প্রমাণ করার জন্য একটি বার্তা স্বাক্ষর করে, তারপর ডেলিগেশন দাবি করে। এনার্জি প্রায় 3 সেকেন্ডে আসে। তারপর আপনার কোড ডেলিগেটেড এনার্জি ব্যবহার করে USDT পাঠায়।
1
TRX পাঠান
পেমেন্ট অ্যাড্রেসে অন-চেইন 4 বা তার বেশি TRX পাঠান (সর্বনিম্ন 4, সর্বোচ্চ 1000)।
2
স্বাক্ষর করুন
আপনি প্রেরক তা প্রমাণ করতে tx_hash:delegate_to স্বাক্ষর করুন।
3
দাবি করুন
tx হ্যাশ এবং স্বাক্ষর সহ /delegate এ POST করুন। এনার্জি ~3s-এ আসে।
মূল্য নির্ধারণ রৈখিক: প্রতি TRX তে 16,250 এনার্জি। সর্বনিম্ন অর্ডার 4 TRX (65,000 এনার্জি — একটি স্ট্যান্ডার্ড USDT ট্রান্সফার), সর্বোচ্চ 1,000 TRX (16.25M এনার্জি)। আপনি যে পরিমাণ পাঠান তা নির্ধারণ করে যে কত এনার্জি আপনাকে ফিরিয়ে দেওয়া হবে — কোনো স্তর নেই, কোনো প্যাকেজ নেই। একটি একক স্ট্যান্ডার্ড ট্রান্সফারের জন্য, ব্যবহার করুন $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 সহায়ক দিয়ে এটি করি। এটি সংরক্ষণ করুন 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,
]),
]);
$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";
}