时间: 2025年06月19日 02:11:14 CST
任务: 修复URS余额检查中汇率转换导致的单位不一致问题
用户报告请求68993679,金额1,配置汇率300时:
"principal_total": "1", "fee_total": "3.0000", "required_total": "4.0000"在 ThirdParty/Urs/Webhook/UrsCheckWebhook.php 的 processCheck 方法中存在单位不一致问题:
calculateWithdrawFee 方法中正确将外部金额1转换为内部金额300principalAmount = $amount 使用的是外部金额1,而不是内部金额300外部金额1 → 汇率300 → 内部金额300
↓
手续费计算(基于内部金额300) → 3.0000
↓
本金1(外部) + 手续费3.0000(内部) = 4.0000 ❌
外部金额1 → 汇率300 → 内部金额300
↓
手续费计算(基于内部金额300) → 3.0000
↓
本金300(内部) + 手续费3.0000(内部) = 303.0000 ✅
在计算手续费前先获取转账应用配置:
// 4. 获取转账应用配置以获取汇率
$transferApp = \App\Module\Transfer\Services\TransferThirdPartyService::getTransferAppByThirdPartyId($thirdPartyAppId);
// 5. 将外部金额转换为内部金额(提现:外部金额转内部金额)
$internalAmount = bcmul($amount, (string) $transferApp->exchange_rate, 4);
// 7. 计算所需总金额(内部本金 + 手续费)
$principalAmount = $internalAmount; // 使用内部金额作为本金
$feeAmount = $feeDto->feeAmount;
$requiredTotal = bcadd($principalAmount, $feeAmount, 4);
{
"check": true,
"diamond_balance": "499,781.0000",
"principal_total": "1", // ❌ 外部金额
"fee_total": "3.0000", // 基于内部金额计算
"required_total": "4.0000", // ❌ 单位不一致
"message": "余额充足,允许提取"
}
{
"check": true,
"diamond_balance": "499,781.0000",
"principal_total": "300.0000", // ✅ 内部金额
"fee_total": "3.0000", // 基于内部金额计算
"required_total": "303.0000", // ✅ 单位一致
"message": "余额充足,允许提取"
}
test_urs_fix_verification.phptest_urs_check_fix.phptest_webhook_api.phpThirdParty/Urs/Webhook/UrsCheckWebhook.php/thirdParty/webhook/urs/check)此次修复解决了URS余额检查中汇率转换导致的单位不一致问题,确保: