本文目录导读:

- 货币格式处理(NumberFormatter)
- eTHB(数字泰铢)处理注意事项
- 汇率转换(THB ↔ eTHB)
- API与第三方集成(BOT Sandbox示例)
- 安全性注意事项
- 最佳实践:金额统一处理
- 总结建议
在PHP项目中处理数字泰铢(THB)与电子泰铢(eTHB)时,主要涉及货币格式、金额计算、API交互、以及符合泰国本地化标准的处理,以下是核心实现要点:
货币格式处理(NumberFormatter)
泰国使用泰铢,货币代码 THB,符号 ,小数位2位,千分位分隔符为逗号。
use NumberFormatter;
function formatThaiBaht(float $amount): string {
$fmt = new NumberFormatter('th_TH', NumberFormatter::CURRENCY);
return $fmt->formatCurrency($amount, 'THB');
}
echo formatThaiBaht(1234567.89); // 输出:฿1,234,567.89
eTHB(数字泰铢)处理注意事项
eTHB(Electronic Thai Baht)是泰国央行(BOT)发行的央行数字货币(CBDC),在PHP项目中处理eTHB需注意:
- 精度:eTHB通常为整数或固定精度(如小数点后2位),但建议使用整数存储(以萨当为单位),避免浮点误差。
- 交易ID:eTHB交易常包含唯一交易哈希或ID,需使用UUID或hex格式存储。
- 钱包地址:类似区块链地址(BIP44格式),建议用
64字符hex字符串或bech32编码。
// 整数存储示例(泰铢转为萨当 satang,1泰铢 = 100萨当)
function thbToSatang(float $amount): int {
return (int)round($amount * 100);
}
function satangToThb(int $satang): float {
return $satang / 100;
}
// eTHB交易数据结构
class EThbTransaction {
public string $txId; // 64位hex
public string $from; // 钱包地址
public string $to; // 钱包地址
public int $amountSatang; // 以萨当为单位
public int $timestamp;
public string $signature; // 数字签名
}
汇率转换(THB ↔ eTHB)
eTHB与THB是1:1锚定,无需汇率转换,但需确保系统区分两者场景:
- 传统支付:使用
THB - 数字钱包/央行CBDC:使用
eTHB
// 统一金额类
class Money {
public string $currency; // 'THB' 或 'eTHB'
public int $amount; // 萨当
}
API与第三方集成(BOT Sandbox示例)
泰国央行提供eTHB测试环境(BOT Regulatory Sandbox),使用PHP cURL或Guzzle调用API:
use GuzzleHttp\Client;
$client = new Client([
'base_uri' => 'https://api.bot.or.th/eTHB/sandbox/v1/',
'headers' => [
'Authorization' => 'Bearer ' . $apiKey,
'Content-Type' => 'application/json',
]
]);
// 发起eTHB转账
$response = $client->post('transactions', [
'json' => [
'sender' => $senderAddress,
'recipient' => $recipientAddress,
'amount' => 100000, // 单位:萨当(即1000泰铢)
'reference_id' => uniqid('tx_', true),
'note' => 'Payment for invoice #123'
]
]);
$result = json_decode($response->getBody(), true);
安全性注意事项
- 数字签名:eTHB交易需使用ECDSA或ED25519签名验证。
- 环境隔离:生产环境使用
eTHB主网,测试环境使用sandbox。 - 合规性:泰国反洗钱法(AMLO)要求数字资产交易需KYC,建议集成泰国国民身份证验证(如NDID)。
最佳实践:金额统一处理
建议在数据库中使用整数存储(萨当),前端显示时格式化:
-- 表结构示例
CREATE TABLE ethb_transactions (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tx_hash CHAR(64) NOT NULL,
from_address VARCHAR(128) NOT NULL,
to_address VARCHAR(128) NOT NULL,
amount_satang BIGINT NOT NULL, -- 10000代表100泰铢
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
// 显示时转换
function displayEThb(int $satang): string {
$thb = $satang / 100;
return '฿' . number_format($thb, 2, '.', ',') . ' (eTHB)';
}
总结建议
- 使用整数类型避免浮点数误差。
- 区分THB与eTHB,即使锚定1:1,业务逻辑不同(eTHB需链上签名、地址等)。
- 关注BOT官方文档:https://www.bot.or.th (搜索eTHB API Spec)。
- 测试环境优先:使用BOT Sandbox测试转账、余额查询、交易历史等。
如有具体API接口或业务场景(如支付网关、钱包集成),提供更多细节可进一步优化代码。