fix: AlinPay充值上分按代收手续费率折算,客户承担手续费,防代付账户被掏空

根因:AlinPay代收时从平台代付账户扣手续费(回调real_amount仍是充值全额),
但系统全额上分→客户余额>账户实收→提现必差手续费那块,账户越提越空。
改为按ALIN_VN配置collection_fee_rate(%)折算上分额:充100万→上分99万(1%费率),
上分/扣代理同步折算,使客户余额=账户实收,代付永远够。back_money仍记全额供审计。
This commit is contained in:
2026-06-03 19:12:26 +08:00
parent dd84f674b0
commit ccf0af4ed2
@@ -232,6 +232,15 @@ trait alinPay
'agent' => 1,
])->lock(true)->find();
// 代收手续费由客户承担:AlinPay 代收时从平台代付账户扣手续费(回调 real_amount 仍是充值全额)
// 若全额上分会导致代付账户被持续掏空(充100万→账户净收99万→提现100万必差)。
// 故按 ALIN_VN 配置的 collection_fee_rate(百分比) 折算上分额,使"客户余额=账户实收"。
$alinCfg = json_decode(Db::name('pay_channel')->where('key', 'ALIN_VN')->value('value'), true);
$alinFeeRate = isset($alinCfg['collection_fee_rate']) ? floatval($alinCfg['collection_fee_rate']) : 0;
if ($alinFeeRate > 0) {
$order['money'] = round($order['money'] * (1 - $alinFeeRate / 100), 2);
}
if (!$zdl || $zdl['money'] < $order['money']) {
Db::rollback();
addLogToFile('代收结算失败:代理余额不足 order=' . $orderNo, 'alin_callback_error', 'alin');