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; 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(); $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', ]); $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; } }