model = $model; // 设置延迟的时间,delay() 方法的参数代表多少秒之后执行 $this->delay($delay); } /** * @return bool * Author: Mead */ public function handle(OrderRepository $orderRepository, RentOrderRepository $rentOrderRepository, PunishmentOrderRepository $punishmentOrderRepository, UserRepository $userRepository) { //判断用户当前退款是否在等待中 if ((int)$this->model->pay_status !== RefundLog::PAY_STATUS_WAIT) { return true; } $user_id = $this->model->user_id; $payment_type = $this->model->pay_type; if (!$userRepository->byIdCheckStatusOk($user_id)) { RefundLog::where('id', $this->model->id)->update([ 'pay_status' => RefundLog::PAY_STATUS_ERROR, 'result' => '用户状态异常' ]); return true; } if ($orderRepository->byUserIdCheckIsExistNoPayOrder($user_id)) { RefundLog::where('id', $this->model->id)->update([ 'pay_status' => RefundLog::PAY_STATUS_ERROR, 'result' => '有未完成的用车订单' ]); return true; } if ($rentOrderRepository->byUserIdCheckIsExistRideOrder($user_id)) { RefundLog::where('id', $this->model->id)->update([ 'pay_status' => RefundLog::PAY_STATUS_ERROR, 'result' => '有未完成的租车订单' ]); return true; } if ($rentOrderRepository->byUserIdCheckIsExistNoPayOrder($user_id)) { RefundLog::where('id', $this->model->id)->update([ 'pay_status' => RefundLog::PAY_STATUS_ERROR, 'result' => '有未支付的租车订单' ]); return true; } $punish = $punishmentOrderRepository->checkNoPayModel($user_id); if (!$punish) { RefundLog::where('id', $this->model->id)->update([ 'pay_status' => RefundLog::PAY_STATUS_ERROR, 'result' => '有未支付的罚单' ]); return true; } $order = DepositOrder::where('id', $this->model->deposit_id)->first(); switch ($payment_type){ case RechargeOrder::PAY_TYPE_WECHAT: $payment = app('wechat.payment'); // 微信支付 $result = $payment->refund->byOutTradeNumber($order->no, $this->model->no, wechat_fee($order->pay_money), wechat_fee($this->model->pay_money), [ // 可在此处传入其他参数,详细参数见微信支付文档 'refund_desc' => '用户申请退回押金', 'notify_url' => config('app.url') . '/api/payments/wechat-refund-notify', ]); break; case RechargeOrder::PAY_TYPE_ALIPAYMINI: $no = $order->no ; $money = $order->pay_money; $data = alipay_mini_config(self::$MERCHANT)->payment()->common()->refund($no,$money); if ($data->fundChange=='Y') { $result['return_code'] ='SUCCESS'; $result['result_code'] = 'SUCCESS'; //支付宝没有退款异步回调 这里写下 $order->is_refund = DepositOrder::REFUND_OK; $order->save(); $order->refund_order_callback(); //押金退款订单回调 }else{ $result['return_code'] ='ERROE'; $result['result_code'] = 'ERROE'; // $result['err_code_des'] = "调用失败,原因:可能已经退款 请确认"; } break; default: RefundLog::where('id', $this->model->id)->update([ 'pay_status' => RefundLog::PAY_STATUS_ALIPAYMINI_PAY, 'result' => '退款方式错误' ]); return true; } $user = User::where('id', $user_id)->first(); if ($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS') { // 判断是否有免押金卡 $deposit_expire_time = Carbon::parse($user->deposit_expire_time); if (Carbon::now()->gte($deposit_expire_time)) { // 免押金卡已经过期 User::where('id', $user->id)->update([ 'deposit_money' => 0, 'is_deposit' => User::DEPOSIT_NO, 'deposit_type' => User::DEPOSIT_TYPE_NO ]); } else { // 免押金卡未过期 User::where('id', $user->id)->update([ 'deposit_money' => 0, 'is_deposit' => User::DEPOSIT_OK, 'deposit_type' => User::DEPOSIT_CARD ]); } } return true; } }