123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Mead
- * Date: 2019/8/9
- * Time: 7:39 PM.
- */
- namespace App\Http\Controllers\V1;
- use App\Http\Controllers\Controller;
- use App\Library\Alipay\Alipay;
- use App\Models\AdminMerchant;
- use App\Models\CouponsUserBag;
- use App\Models\DepositOrder;
- use App\Models\Order;
- use App\Models\RefundLog;
- use App\Models\User;
- use App\Repositories\OrderRepository;
- use App\Repositories\PunishmentOrderRepository;
- use App\Repositories\RefundLogRepository;
- use App\Repositories\RentOrderRepository;
- use App\Repositories\UserRepository;
- use Carbon\Carbon;
- use Dingo\Api\Http\Request;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- /**
- * 对外接口模块
- * Class AreaController
- * @package App\Http\Controllers\V1
- */
- class ApiController extends Controller
- {
- protected static $MERCHANT_ID = 0;
- protected static $MERCHANT = [];
- /**
- * 清空缓存
- * @return mixed
- * User: Mead
- */
- public function clearCache()
- {
- try {
- Cache::flush();
- return [
- 'status_code' => 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)
- ]);
- }
- }
- }
|