0 ]; } catch (\Exception $exception) { return $this->errorNoValidation($exception->getMessage()); } } /** * 支付宝admin退款接口 * @param Request $request * @param OrderRepository $orderRepository * @param RentOrderRepository $rentOrderRepository * @param RefundLogRepository $refundLogRepository * @param PunishmentOrderRepository $punishmentOrderRepository * @param UserRepository $userRepository * @return \Dingo\Api\Http\Response */ public function alipayRefundLog(Request $request, OrderRepository $orderRepository, RentOrderRepository $rentOrderRepository, RefundLogRepository $refundLogRepository, PunishmentOrderRepository $punishmentOrderRepository, UserRepository $userRepository) { $user_id = $request->input('user_id'); $merchant_id = $request->input('merchant_id'); self::$MERCHANT_ID = $merchant_id; self::$MERCHANT = AdminMerchant::byIdNoStatus($merchant_id); if (!self::$MERCHANT) { Log::error('[支付]:参数错误'); return $this->response->array([ 'is_refund_status' => false, 'msg' => '[支付]:参数错误' ]); } if (!$userRepository->byIdCheckStatusOk($user_id)) { return $this->response->array([ 'is_refund_status' => false, 'msg' => '账号状态异常,暂不能退款!' ]); } // 有未结账的订单是能不能退 if ($orderRepository->byUserIdCheckIsExistNoPayOrder($user_id)) { return $this->response->array([ 'is_refund_status' => false, 'msg' => '有未结算的订单,暂不能退款!' ]); } if ($rentOrderRepository->byUserIdCheckIsExistRideOrder($user_id)) { return $this->response->array([ 'is_refund_status' => false, 'msg' => '有未完成的租车订单,请先处理' ]); } if ($rentOrderRepository->byUserIdCheckIsExistNoPayOrder($user_id)) { return $this->response->array([ 'is_refund_status' => false, 'msg' => '有未支付的租车订单,请先处理' ]); } $user = $userRepository->byIdGetUserStatus($user_id); $punish = $punishmentOrderRepository->checkNoPayModel($user_id); if (!$punish) return $this->response->array([ 'is_refund_status' => false, 'msg' => '有罚单未支付,请先处理' ]); // if ((int)$user->deposit_type === User::DEPOSIT_CARD) { // return $this->errorNoValidation('押金类型为免押金卡,不能退还押金'); // } $order = DepositOrder::where('user_id', $user_id)->where('pay_status', DepositOrder::PAY_STATUS_OK)->where('is_refund', DepositOrder::REFUND_NO)->orderBy('id', 'desc')->first(); if (!$order) { return $this->response->array([ 'is_refund_status' => false, 'msg' => '此用户没有缴纳押金' ]); } $refund = DB::transaction(function () use ($order, $user_id) { $refund = RefundLog::firstOrCreate([ 'deposit_id' => $order->id, 'user_id' => $user_id, ], [ 'no' => RefundLog::makeNo(self::$ORDER_TAG), 'money' => $order->pay_money, 'type' => RefundLog::TYPE_USER, 'is_check_status' => RefundLog::CHECK_STATUS_OK, 'area_id' => $order->area_id, 'pay_type' => $order->pay_type, 'pay_money' => $order->pay_money, 'pay_status' => RefundLog::PAY_STATUS_NO, 'merchant_id' => self::$MERCHANT_ID ]); // 修改用户押金 if ((int)$refund->pay_status === RefundLog::PAY_STATUS_WAIT) { $refund->pay_status = RefundLog::PAY_STATUS_NO; $refund->type = RefundLog::TYPE_USER_SPEED; $refund->save(); } return $refund; }); //查询有没有退款成功过 // $no = $refund->deposit->no; // $result = alipay_mini_config(self::$MERCHANT)->payment()->common()->queryRefund($no,$refund->no); // // if($result->code=='10000') { // if ($result->refundAmount > 0) { //退款成功 退款金额 // //退款成功 // } // } //支付宝退款 不查询直接退款 $no = $order->no; $money = $order->pay_money; $data = alipay_mini_config(self::$MERCHANT)->payment()->common()->optional("out_request_no", $refund->no)->refund($no, $money); if ($data->fundChange == 'Y') { //支付宝没有退款异步回调 这里写下 return $this->response->array([ 'is_refund_status' => true, 'msg' => 'ok' ]); } else { $refund->result = json_encode($data); } $refund->save(); return $this->response->array([ 'is_refund_status' => false, 'msg' => '退款操作失败,可能已经退款,到账会有时间' ]); } /** * 支付宝返还一部分钱 骑行订单返还 请求 * @param Request $request * @return \Dingo\Api\Http\Response */ public function alipayRefundLittle(Request $request) { $merchant_id = $request->input('merchant_id'); self::$MERCHANT_ID = $merchant_id; self::$MERCHANT = AdminMerchant::byIdNoStatus($merchant_id); if (!self::$MERCHANT) { Log::error('[支付]:参数错误'); return $this->response->array([ 'is_refund_status' => false, 'msg' => '[支付]:参数错误' ]); } $no = $request->input('no'); $money = $request->input('money'); $out_request_no = $request->input('out_request_no'); $data = alipay_mini_config(self::$MERCHANT)->payment()->common()->optional("out_request_no", $out_request_no)->refund($no, $money); if ($data->fundChange == 'Y') { //支付宝没有退款异步回调 这里写下 return $this->response->array([ 'is_refund_status' => true, 'msg' => 'ok' ]); } else { return $this->response->array([ 'is_refund_status' => false, 'msg' => '退款失败', 'data' => $data ]); } } /** * 押金 支付宝预授权解冻 * @param Request $request * @return \Dingo\Api\Http\Response * Author: Mead */ public function alipayYushouquanJiedongApi(Request $request) { $merchant_id = $request->input('merchant_id'); self::$MERCHANT_ID = $merchant_id; self::$MERCHANT = AdminMerchant::byIdNoStatus($merchant_id); if (!self::$MERCHANT) { Log::error('[支付]:参数错误'); return $this->response->array([ 'is_refund_status' => false, 'msg' => '[支付]:参数错误' ]); } $no = $request->input('no'); $rno = $request->input('rno'); $money = $request->input('money'); $refund_no = $request->input('refund_no'); $merchant = self::$MERCHANT; $alipayobj = new Alipay(); $data = AlipayYushouquanJiedong($merchant, $no, $rno); $resultdata = $alipayobj->AlipayQueryYushouquan($data); // 预授权查询 if (!empty($resultdata->code) && $resultdata->code == 10000 && $resultdata->status == 'SUCCESS') { if ($resultdata->rest_amount == '0.00') { return $this->response->array([ 'is_refund_status' => false, 'msg' => '已经解冻完所有金额' ]); } } else { return $this->errorNoValidation($resultdata->sub_msg); } $data = AlipayYushouquanJiedongQingqiu($data, $resultdata->auth_no, $refund_no, $resultdata->rest_amount); $resultdata = $alipayobj->zijidongjieJiedong($data); // 预授权解冻 if (!empty($resultdata->status) && $resultdata->status == 'SUCCESS' && $resultdata->amount == $money) { return $this->response->array([ 'is_refund_status' => true, 'msg' => 'ok' ]); } else { return $this->response->array([ 'is_refund_status' => false, 'msg' => json_encode($resultdata) ]); } } }