本文目录导读:

看起来您可能在询问关于 PHP 项目中处理格鲁吉亚拉里(GEL)与 eGEL(数字格鲁吉亚拉里) 的相关实现或问题。
以下是一些关键信息和实现建议:
基本概念
- GEL:格鲁吉亚拉里,格鲁吉亚法定货币。
- eGEL:格鲁吉亚央行发行的 数字货币(CBDC),与 GEL 1:1 锚定。
- 在实际开发中,它们通常被当作 同一种货币单位 处理,但需要区分资金来源(如支付渠道)。
PHP 实现要点
(1)金额存储与计算
不要使用浮点数,使用整型(存储最小单位,如 tetri,1 GEL = 100 tetri):
// 存储为 tetri(分)
$amountInTetri = 1000; // 10 GEL
$eGelAmountTetri = 500; // 5 eGEL
// 计算
$total = $amountInTetri + $eGelAmountTetri; // 1500 tetri = 15 GEL/eGEL
// 显示
function formatGEL(int $tetri): string {
return number_format($tetri / 100, 2, '.', '') . ' GEL';
}
(2)数据库设计
-- 交易表区分货币类型
CREATE TABLE transactions (
id INT PRIMARY KEY,
user_id INT,
amount_tetri INT NOT NULL, -- 正数收入,负数支出
currency_type ENUM('GEL', 'eGEL') NOT NULL, -- 区分实体或数字
balance_after_tetri INT NOT NULL, -- 余额快照(合并所有类型)
created_at TIMESTAMP
);
(3)汇率与转换
eGEL 与 GEL 是 1:1 固定汇率,但可能需要记录来源:
class CurrencyConverter {
const RATIO = 1.0; // 1 GEL = 1 eGEL
public static function convert(int $tetri, string $from, string $to): int {
// 由于固定汇率,直接返回相同值
return $tetri;
}
}
常见业务场景
| 场景 | 处理方式 |
|---|---|
| 支付时接受两者 | 统一作为 amount_tetri 存储,记录 currency_type |
| 余额合并显示 | 直接加总所有类型的 tetri |
| 提现限制 | 检查各类型余额是否足够(如只能提 eGEL) |
| 对账 | 按 currency_type 分组统计 |
API 示例(PHP + JSON)
// 支付请求
$request = [
'currency' => 'eGEL', // 或 'GEL'
'amount' => 15.50, // 15.50 GEL/eGEL
];
// 后端处理
$tetri = intval($request['amount'] * 100); // 1550 tetri
// 验证余额
$user = User::find($userId);
$availableBalance = $currencyType === 'eGEL'
? $user->eGelBalanceTetri
: $user->gelBalanceTetri;
if ($availableBalance < $tetri) {
throw new Exception("Insufficient {$currencyType} balance");
}
注意事项
- 精度问题:使用
int或string,绝对不要用float。 - 来源追踪:eGEL 可能有使用限制(如仅限数字支付),需在业务逻辑处理。
- 显示格式:不同国家显示习惯(如
50 ₾vsGEL 12.50)。 - 合规性:如有跨境需求,需考虑反洗钱要求(记录交易来源和用途)。
如果您遇到具体问题
请补充描述:
- 是 汇率转换、余额计算、数据库设计 还是 支付网关集成 问题?
- 是否有 银行/央行 API 需要对接?
- 当前代码遇到的 错误或异常 是什么?
这样我可以给出更精准的代码示例或解决方案。