การผสานรวม 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 key ไม่ต้องลงทะเบียน โค้ดของคุณจะส่ง TRX ไปยังที่อยู่ชำระเงิน TronEnergy บนบล็อกเชน ลงนามในข้อความเพื่อพิสูจน์ความเป็นเจ้าของ จากนั้นจึงขอรับการมอบหมาย Energy จะมาถึงภายในเวลาประมาณ 3 วินาที จากนั้นโค้ดของคุณจะส่ง USDT โดยใช้พลังงานที่ได้รับมอบหมายนั้น
1
ส่ง TRX
ส่ง TRX จำนวน 4 เหรียญขึ้นไปไปยังที่อยู่ชำระเงินบนบล็อกเชน (ขั้นต่ำ 4 เหรียญ สูงสุด 1000 เหรียญ)
2
เข้าสู่ระบบ
ลงชื่อ tx_hash:delegate_to เพื่อยืนยันว่าคุณคือผู้ส่ง
3
เรียกร้อง
ส่งคำขอ POST ไปยัง delegate พร้อมแฮชและลายเซ็นของ 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 หากธุรกรรมยังไม่ได้รับการจัดทำดัชนีบนบล็อกเชน ให้รอสักครู่แล้วลองใหม่อีกครั้ง
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";
}