orderNo = $orderNo; $this->attach = $attach; } /** * 订单支付成功业务处理 */ public function onPaySuccess($payType, $payData = []) { if ($this->attach && $this->attach['multiple'] == 0) { // 实例化订单模型 $this->model = OrderModel::getPayDetail($this->orderNo); // 获取用户信息 $this->user = UserModel::detail($this->model['user_id']); $this->paySuccess($payType, $payData, []); } else { $orderList = OrderTradeModel::detailWithOrder(['out_trade_no' => $this->orderNo, 'pay_status' => 10]); $orderTradeInfo = OrderTradeModel::where('out_trade_no', '=', $this->orderNo) ->where('pay_status', '=', 10) ->find(); $totalPrice = round($orderTradeInfo['balance'] + $orderTradeInfo['online_money'], 2); foreach ($orderList as $order) { $balance = 0; $online_money = 0; if ($orderTradeInfo['balance'] > 0) { $balance = round($order['pay_price'] / $totalPrice * $orderTradeInfo['balance'], 2); } if ($orderTradeInfo['online_money'] > 0) { $online_money = round($order['pay_price'] / $totalPrice * $orderTradeInfo['online_money'], 2); } $payInfo['balance'] = $balance; $payInfo['online_money'] = $online_money; $this->model = $order; // 获取用户信息 $this->user = UserModel::detail($this->model['user_id']); $this->paySuccess($payType, $payData, $payInfo); } //更新trade为已支付 (new OrderTradeModel())->where('out_trade_no', '=', $this->orderNo)->save([ 'pay_status' => 20, 'pay_time' => time() ]); } if($this->getError() != ''){ return false; } return true; } /** * 订单支付成功业务处理 */ public function paySuccess($payType, $payData = [], $payInfo = []) { // 更新付款状态 $status = $this->updatePayStatus($payType, $payData, $payInfo); // 订单支付成功行为 if ($status == true) { // 获取订单详情 $detail = OrderModel::getUserOrderDetail($this->model['order_id'], $this->user['user_id']); // 记录分销商订单,团队分红订单 if ($detail['is_agent'] == 1) { AgentOrderModel::createOrder($detail); } // 记录分红订单 by yj TeamOrderModel::createOrder($detail); event('PaySuccess', $detail); } } /** * 更新付款状态 */ private function updatePayStatus($payType, $payData = [], $payInfo = []) { // 事务处理 $this->model->transaction(function () use ($payType, $payData, $payInfo) { // 更新订单状态 $this->updateOrderInfo($payType, $payData, $payInfo); // 累积用户总消费金额 $this->user->setIncPayMoney($this->model['pay_price']); // 记录订单支付信息 $this->updatePayInfo(); //更新直播销量 $this->updateLiveSales(); }); return true; } //更新直播销量 public function updateLiveSales() { // 如果是直播,则更新直播间销售数量 if($this->model['room_id'] > 0){ $sales_num = (new OrderProductModel())->where('order_id','=',$this->model['order_id'])->sum('total_num'); (new RoomModel())->where('room_id', '=', $this->model['room_id'])->inc('sales_num',$sales_num)->update(); } } /** * 更新订单记录 */ private function updateOrderInfo($payType, $payData, $payInfo) { // 更新商品库存、销量 ProductFactory::getFactory($this->model['order_source'])->updateStockSales($this->model['product']); // 更新虚拟商品核销信息 by yj if ($this->model['product'][0]['is_verify'] == 1) { $product = $this->model['product'][0]; //购买后生效且天数大于0 if($product["verify_type"] == 10 && $product["verify_day"] > 0){ $verify_start_time = time(); $verify_end_time = $verify_start_time + $product["verify_day"] * 86400; $verifyModel = new OrderVerifyModel(); $verify_detail = $verifyModel::getVerifyDetail($this->model['order_id']); if(!empty($verify_detail)) { $verify_data=[ 'verify_start_time' => $verify_start_time, 'verify_end_time' => $verify_end_time, ]; $verifyModel->where("order_id","=",$verify_detail["order_id"])->update($verify_data); } /*$this->model->verify()->update([ 'verify_start_time' => $verify_start_time, 'verify_end_time' => $verify_end_time, ]);*/ } } // 整理订单信息 $order = [ 'pay_type' => $payType, 'pay_status' => 20, 'pay_time' => time() ]; if ($payInfo) { $order['balance'] = $payInfo['balance']; $order['online_money'] = $payInfo['online_money']; } if ($payType != OrderPayTypeEnum::BALANCE && isset($order['online_money']) && $order['online_money'] == 0) { $order['pay_type'] = OrderPayTypeEnum::BALANCE; } if (isset($payData['attach'])) { $attach = json_decode($payData['attach'], true); if(isset($attach['pay_source'])){ $order['pay_source'] = $attach['pay_source']; } } if ($payType == OrderPayTypeEnum::WECHAT || $payType == OrderPayTypeEnum::ALIPAY) { $order['transaction_id'] = $payData['transaction_id']; } //支付完成后,判断商户是否独立收款 by yj 2024.3.13 //$is_independent = SettingModel::getIndependentOpen(); $is_independent = SupplierModel::getIndependentOpen($this->model['shop_supplier_id']); if(!empty($is_independent) && $is_independent == 1){ $order['supplier_money'] = 0;//使用了商户独立收款,则重置商户金额 $order['is_independent'] = 1;//标志为独立收款订单 } // 更新订单状态 return $this->model->save($order); } /** * 记录订单支付信息 */ private function updatePayInfo() { // 余额支付 if ($this->model['balance'] > 0) { //支付完成后,判断商户是否独立收款 by yj 2024.3.13 //$is_independent = SettingModel::getIndependentOpen(); $is_independent = SupplierModel::getIndependentOpen($this->model['shop_supplier_id']); if(!empty($is_independent) && $is_independent == 1){ $shop_supplier_id = $this->model['shop_supplier_id'];//扣除哪个商户的余额的 SupplierBalanceModel::setDecBalance($this->model["shop_supplier_id"],$this->user['user_id'],$this->model['balance']); }else{ $shop_supplier_id = 0;//扣平台余额的金额,则商户id为0 // 更新用户余额 (new UserModel())->where('user_id', '=', $this->user['user_id']) ->dec('balance', $this->model['balance']) ->update(); } BalanceLogModel::add(BalanceLogSceneEnum::CONSUME, [ 'user_id' => $this->user['user_id'], 'money' => -$this->model['balance'], 'shop_supplier_id' => $shop_supplier_id, 'app_id' => $this->model['app_id'], ], ['order_no' => $this->model['order_no']]); } } /** * 返回app_id,大于0则存在订单信息 * $pay_status 兼容支付宝支付 */ public function isExist($pay_status = 10) { // 订单信息 $app_id = 0; if ($this->attach['multiple'] == 0) { $params = ['trade_no' => $this->orderNo, 'is_delete' => 0]; if ($pay_status == 10) { $params['pay_status'] = 10; } $order = OrderModel::detail($params, []); !empty($order) && $app_id = $order['app_id']; }else{ $params = ['out_trade_no' => $this->orderNo]; if($pay_status == 10){ $params['pay_status'] = 10; } $trade = OrderTradeModel::detail($params, ['orderList']); !empty($trade) && $app_id = $trade['app_id']; } return $app_id; } /** * 返回shop_supplier_id * $pay_status 兼容支付宝支付 */ public function isExistSupplier($pay_status = 10) { // 订单信息 $shop_supplier_id = 0; if ($this->attach['multiple'] == 0) { $params = ['trade_no' => $this->orderNo, 'is_delete' => 0]; if ($pay_status == 10) { $params['pay_status'] = 10; } $order = OrderModel::detail($params, []); !empty($order) && $shop_supplier_id = $order['shop_supplier_id']; }else{ $params = ['out_trade_no' => $this->orderNo]; if($pay_status == 10){ $params['pay_status'] = 10; } $trade = OrderTradeModel::detail($params, ['orderList']); !empty($trade) && $shop_supplier_id = $trade['shop_supplier_id']; } return $shop_supplier_id; } }