```
feat(order): 添加订单支付防重复提交机制 防止同一笔订单被多次处理导致数据异常的问题。实现数据库事务锁机制, 确保订单支付状态变更的原子性。 fix(huifu-onboard): 重构上传组件并优化银行信息录入流程 - 将原有的u-upload组件替换为自定义上传选择器 - 新增银行支行联行号手动输入功能 - 添加区域选择联动和草稿数据应用功能 - 增加上传错误处理和隐私保护相关提示 feat(auth-modal): 完善微信授权登录和隐私协议功能 - 添加微信小程序隐私授权初始化 - 实现手机号一键登录防频控机制 - 集成用户协议和隐私协议勾选验证 - 优化登录流程错误处理和用户体验 ```
这个提交包含在:
@@ -824,19 +824,41 @@ trait OrderOper
|
||||
|
||||
public function paymentProcess($order, $notify)
|
||||
{
|
||||
$order->status = Order::STATUS_PAYED;
|
||||
$order->paytime = time();
|
||||
$order->transaction_id = $notify['transaction_id'];
|
||||
$order->payment_json = $notify['payment_json'];
|
||||
$order->pay_type = $notify['pay_type'];
|
||||
$order->pay_fee = $notify['pay_fee'];
|
||||
|
||||
// 组合支付更新付款金额
|
||||
if ($order->pay_type == 'group') {
|
||||
$order->total_fee = bcsub($order->total_fee, $order->pay_money, 2);
|
||||
$orderId = is_object($order) ? (int) $order->id : (int) ($order['id'] ?? 0);
|
||||
if ($orderId <= 0) {
|
||||
return $order;
|
||||
}
|
||||
|
||||
$order->save();
|
||||
$firstPaid = false;
|
||||
$order = Db::transaction(function () use ($orderId, $notify, &$firstPaid) {
|
||||
$order = Order::where('id', $orderId)->lock(true)->find();
|
||||
if (!$order) {
|
||||
return null;
|
||||
}
|
||||
if ((int) $order->status > Order::STATUS_NOPAY) {
|
||||
\think\Log::info('[order_pay] paymentProcess skip duplicate order_id=' . $orderId);
|
||||
return $order;
|
||||
}
|
||||
|
||||
$firstPaid = true;
|
||||
$order->status = Order::STATUS_PAYED;
|
||||
$order->paytime = time();
|
||||
$order->transaction_id = $notify['transaction_id'];
|
||||
$order->payment_json = $notify['payment_json'];
|
||||
$order->pay_type = $notify['pay_type'];
|
||||
$order->pay_fee = $notify['pay_fee'];
|
||||
|
||||
if ($order->pay_type == 'group') {
|
||||
$order->total_fee = bcsub($order->total_fee, $order->pay_money, 2);
|
||||
}
|
||||
|
||||
$order->save();
|
||||
return $order;
|
||||
});
|
||||
|
||||
if (!$order || !$firstPaid) {
|
||||
return $order;
|
||||
}
|
||||
|
||||
try {
|
||||
saveUserMessage([
|
||||
@@ -855,12 +877,10 @@ trait OrderOper
|
||||
\think\Log::error('[order_pay] operAdd failed: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
// 组合支付扣除用户余额
|
||||
if ($order->pay_type == 'group') {
|
||||
User::where(['id' => $user->id])->setDec('money', $order->pay_money);
|
||||
}
|
||||
|
||||
// 预约抢购标记成已使用
|
||||
if ($order->activity_type === 'robbuy') {
|
||||
RobOrderModel::where([
|
||||
'user_id' => $user->id,
|
||||
@@ -876,7 +896,6 @@ trait OrderOper
|
||||
\think\Log::error('[order_pay] order_payed_after hook failed: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
// 支付成功后续使用异步队列处理
|
||||
try {
|
||||
\think\Queue::push('\addons\shopro\job\OrderPayed@payed', ['order' => $order, 'user' => $user], 'shopro-high');
|
||||
} catch (\Throwable $e) {
|
||||
|
||||
在新工单中引用
屏蔽一个用户