fix: AlinPay充值上分按代收手续费率折算,客户承担手续费,防代付账户被掏空
根因:AlinPay代收时从平台代付账户扣手续费(回调real_amount仍是充值全额), 但系统全额上分→客户余额>账户实收→提现必差手续费那块,账户越提越空。 改为按ALIN_VN配置collection_fee_rate(%)折算上分额:充100万→上分99万(1%费率), 上分/扣代理同步折算,使客户余额=账户实收,代付永远够。back_money仍记全额供审计。
This commit is contained in:
@@ -232,6 +232,15 @@ trait alinPay
|
|||||||
'agent' => 1,
|
'agent' => 1,
|
||||||
])->lock(true)->find();
|
])->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']) {
|
if (!$zdl || $zdl['money'] < $order['money']) {
|
||||||
Db::rollback();
|
Db::rollback();
|
||||||
addLogToFile('代收结算失败:代理余额不足 order=' . $orderNo, 'alin_callback_error', 'alin');
|
addLogToFile('代收结算失败:代理余额不足 order=' . $orderNo, 'alin_callback_error', 'alin');
|
||||||
|
|||||||
Reference in New Issue
Block a user