0]; $app = \WechatService::officialApp(); $app_user = $app->user->get($wechat_user->getId()); if (!isset($app_user['unionid']) || empty($app_user['unionid'])) return ['error_msg'=>'请关注福恋智能微信公众号!']; $unionid = $app_user['unionid']; return ['unionid'=>$unionid, 'openid'=>$wechat_user->getId()]; }else { return ['unionid'=>"oVMWos7BVjhvSnunE3A0PfACzftY", 'openid'=>'oVEaG5JVDFI-1SVwhOHLwhzYHaHw']; } } catch (\Exception $e) { $this->getError($e); return false; } } /** * 通过unionid获取收益 * @param $unionid * @return \Illuminate\Http\JsonResponse|null */ public function userByUnionid($unionid) { try { $wechat = Wechat::where('unionid', $unionid)->first(); if (empty($wechat) || empty($wechat->user_id)) return null; $merchant_user = MerchantUser::where('user_id', $wechat->user_id)->first(); return $merchant_user; }catch (\Exception $e) { $this->getError($e); return false; } } /** * saas收益账号 * @param Request $request */ public function saasEarningAccount(Request $request) { try { // return $this->failure("系统维护中"); $is_wechat_auth = 1; if (env('APP_ENV') == 'production') { //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; // $unionid = "oVMWos64S25ILZN-eh-4HoCr7iss"; $merchant_user = $this->userByUnionid($unionid); if ($merchant_user === false) throw new \Exception('获取merchant_user失败. unionid='.$unionid); if (empty($merchant_user)) return $this->success('ok', ['balance'=>0, 'withdrawl'=>0, 'is_wechat_auth'=>1,'total_value'=>0, 'frezzing_value'=>0]); //更新用户账号 $other_merchnat_user = MerchantUser::where('openid', $result['openid'])->first(); \Log::info($merchant_user->id); if (empty($other_merchnat_user) || $other_merchnat_user->id == $merchant_user->id) { $merchant_user->openid = $result['openid']; } $other_merchnat_user = MerchantUser::where('unionid', $result['unionid'])->first(); if (empty($other_merchnat_user) || $other_merchnat_user->id == $merchant_user->id) $merchant_user->unionid = $result['unionid']; $merchant_user->save(); }else { $merchant_user = MerchantUser::find(223); if ($merchant_user === false) throw new \Exception('获取merchant_user失败'); if (empty($merchant_user)) return $this->success('ok', ['balance'=>0, 'withdrawl'=>0, 'is_wechat_auth'=>1,'total_value'=>0, 'frezzing_value'=>0]); } // $merchant_user = MerchantUser::find(18); //账号是否异常 $res = MEarningAccount::where('m_user_id', $merchant_user->id)->where('is_banned', 1)->first(); if ($res) throw new \Exception("账号id: {$res->id}异常"); //收益账号 $balance = MEarningAccount::where('m_user_id', $merchant_user->id)->sum('balance'); $withdrawl = MEarningAccount::where('m_user_id', $merchant_user->id)->sum('withdrawl'); //最近30次提现记录 $near_withdraws = MEarningwithdraws::select('id', 'real_value', 'value', 'name')->where('status', '<>', 'canceled')->where('m_user_id', '<>', $merchant_user->id)->orderBy('id', 'desc')->limit(30)->get(); foreach ($near_withdraws as $near_withdraw) { $near_withdraw->name = mb_substr($near_withdraw->name, 0, 1)."*"; } $poundage = Redis::get('withdrawal_poundage')??2; //已经结算收益的订单id $earning_order_ids = \App\Models\MEarning::query()->where('m_user_id', $merchant_user->id) ->whereNull('deleted_at') ->groupBy('m_order_id') ->pluck('m_order_id'); //总收益 $total_value = MEarningAccount::where('m_user_id', $merchant_user->id)->sum('total_value'); //冻结收益 $frezzing_value = MAdvanceEarning::where('m_user_id', $merchant_user->id)->whereNotIn('m_order_id',$earning_order_ids)->sum('value'); $total_value = number_format($total_value + $frezzing_value, 2, '.', ''); //提现账号 $account = MEarningTransfers::where('m_user_id',$merchant_user->id)->select('id','m_id','m_user_id','name','nick_name','pic','way','account','created_at','updated_at')->orderBy('updated_at','desc')->first(); return $this->success('ok',['balance'=>$balance, 'withdrawl'=>$withdrawl, 'is_wechat_auth'=>1, 'near_withdraws'=>$near_withdraws, 'poundage'=>$poundage, 'total_value'=>$total_value, 'frezzing_value'=>$frezzing_value,'account'=>$account]); } catch (\Exception $e) { $this->getError($e); return $this->failure("服务器休息,请稍后再试"); } } /** * 收益记录 * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View */ public function saasEarningHistories(Request $request) { try { $is_wechat_auth = 1; if (env('APP_ENV') == 'production') { //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; // $unionid = "oVMWos64S25ILZN-eh-4HoCr7iss"; $merchant_user = $this->userByUnionid($unionid); }else { $merchant_user = MerchantUser::find(223); } if ($merchant_user == false) throw new \Exception('获取merchant_user失败. unionid='.$unionid); if (empty($merchant_user)) { $earnings = MEarning::where('m_user_id', null)->orderBy('id', 'desc')->paginate(); } else { // $earnings = MEarning::with('order:id,desc,account_id', 'order.user:id,nickname,pic')->whereHas('order.user')->where('m_user_id', $merchant_user->id)->select('m_order_id', 'm_user_id', 'value', 'created_at')->orderBy('id', 'desc')->paginate(); $earnings = MEarning::with('order:id,desc,account_id', 'order.user:id,nickname,pic')->where('m_user_id', $merchant_user->id)->where('value', '>', 0)->select('m_order_id', 'm_user_id', 'value', 'created_at', \DB::raw('sum(value) as value'))->groupBy('m_order_id')->orderBy('m_order_id', 'desc')->paginate(); $default_avatar = "https://images.ufutx.com/202007/01/e0de60525143427d4dd19515a5b387ba.png"; foreach ($earnings as $earning) { if (empty($earning->order->user)) { $order_user = [ 'id'=>$earning->order?$earning->order->account_id:0, 'nickname'=>"未知", '头像'=>$default_avatar ]; $earning->order_user = $order_user; } else{ $earning->order_user = $earning->order->user; $earning->order_user->pic = $earning->order_user->pic?:$default_avatar; } } } return $this->success('ok', compact('is_wechat_auth', 'earnings')); }catch (\Exception $e) { $this->getError($e); return $this->failure("服务器休息,请稍后再试"); } } public function EarningHistoriesV2(Request $request) { try { $is_wechat_auth = 1; //检查unionid if (env('APP_ENV') == 'production') { $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; $merchant_user = $this->userByUnionid($unionid); } else { $merchant_user = MerchantUser::find(223); } // $merchant_user = MerchantUser::find(18); if ($merchant_user === false) throw new \Exception('获取merchant_user失败. unionid='.$unionid); if (empty($merchant_user)) { $earnings = MAdvanceEarning::where('m_user_id', null)->orderBy('id', 'desc')->paginate(); } else { $status = $request->input('status'); $users = \DB::table('merchant_users')->selectRaw('id as order_user_id,nickname,pic'); $orders = \DB::table('tourist_orders')->leftJoinSub($users, 'ufutx_users', function($join) { $join->on('tourist_orders.account_id', '=', 'users.order_user_id'); })->where('pay_status', '<>', 0)->select(\DB::raw('ufutx_users.*'), 'id', 'desc','type', 'type_id', 'goods', \DB::raw( 'created_at as o_created_at')); //已经结算收益的订单id $earning_order_ids = \App\Models\MEarning::query()->where('m_user_id', $merchant_user->id) ->whereNull('deleted_at') ->groupBy('m_order_id') ->pluck('m_order_id'); if ($status) { if ($status == 1) { $earnings = \DB::table('m_advance_earnings')->whereNotIn('m_order_id',$earning_order_ids)->where('m_user_id', $merchant_user->id)->whereNull('deleted_at')->leftJoinSub($orders, 'ufutx_orders', function($join) { $join->on('m_order_id', '=', 'orders.id'); })->selectRaw('m_user_id,m_order_id,earning_time,sum(value) as value, created_at as e_created_at, 1 as status, ufutx_orders.*')->groupBy('m_order_id'); $value = \DB::table('m_advance_earnings')->whereNotIn('m_order_id',$earning_order_ids)->where('m_user_id', $merchant_user->id)->whereNull('deleted_at')->sum('value'); }elseif ($status == 2) { $earnings = \DB::table('m_earnings')->where('m_user_id', $merchant_user->id)->whereNull('deleted_at')->leftJoinSub($orders, 'ufutx_orders', function($join) { $join->on('m_order_id', '=', 'orders.id'); })->selectRaw('m_user_id,m_order_id,earning_time,sum(value) as value, created_at as e_created_at, 2 as status, ufutx_orders.*')->groupBy('m_order_id'); $value = \DB::table('m_earnings')->where('m_user_id', $merchant_user->id)->whereNull('deleted_at')->sum('value'); } } else { $m_earnings = \DB::table('m_earnings')->where('m_user_id', $merchant_user->id)->whereNull('deleted_at')->leftJoinSub($orders, 'ufutx_orders', function($join) { $join->on('m_order_id', '=', 'orders.id'); })->selectRaw('m_user_id,m_order_id,earning_time,sum(value) as value, created_at as e_created_at, 2 as status, ufutx_orders.*')->groupBy('m_order_id'); $earnings = \DB::table('m_advance_earnings')->whereNotIn('m_order_id',$earning_order_ids)->where('m_user_id', $merchant_user->id)->whereNull('deleted_at')->union($m_earnings)->leftJoinSub($orders, 'ufutx_orders', function($join) { $join->on('m_order_id', '=', 'orders.id'); })->selectRaw('m_user_id,m_order_id,earning_time,sum(value) as value, created_at as e_created_at, 1 as status, ufutx_orders.*'); $value1 = \DB::table('m_earnings')->where('m_user_id', $merchant_user->id)->whereNull('deleted_at')->sum('value'); $value2 = \DB::table('m_advance_earnings')->whereNotIn('m_order_id',$earning_order_ids)->where('m_user_id', $merchant_user->id)->whereNull('deleted_at')->sum('value'); $value = $value1 + $value2; } } $earnings = $earnings->groupBy('m_order_id')->orderBy('e_created_at', 'desc')->paginate(); foreach ($earnings as $earning) { $goods_name = $earning->desc?:$earning->goods; $text = '在'.$earning->o_created_at.'通过你的分享购买了【'.$goods_name.'】'; $earning->text = $text; } return $this->success('ok', compact('is_wechat_auth', 'earnings', 'value')); }catch (\Exception $e) { $this->getError($e); return $this->failure("服务器休息,请稍后再试"); } } /** * 提现记录 * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View */ public function saasWithdrawHistories(Request $request) { try { // return $this->failure("系统维护中"); //检查unio $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; // $unionid = "oVMWos64S25ILZN-eh-4HoCr7iss"; $is_wechat_auth = 1; $merchant_user = $this->userByUnionid($unionid); if ($merchant_user === false) throw new \Exception('获取merchant_user失败. unionid='.$unionid); if (empty($merchant_user)) { $withdraws = MEarningwithdraws::where('m_user_id', null)->orderBy('id', 'desc')->paginate(); } else { $withdraws = MEarningwithdraws::where('m_user_id', $merchant_user->id)->select('m_user_id', 'real_value', 'value', 'created_at', 'status', 'err_msg','way')->orderBy('id', 'desc')->paginate(); } return $this->success('ok', compact('is_wechat_auth', 'withdraws')); }catch (\Exception $e) { $this->getError($e); return $this->failure("服务器休息,请稍后再试"); } } public function saasWithdraw(Request $request) { try { //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; // $unionid = "oVMWos64S25ILZN-eh-4HoCr7iss"; $merchant_user = $this->userByUnionid($unionid); if ($merchant_user == false) throw new \Exception('获取merchant_user失败. unionid='.$unionid); $account = $request->input("account"); $name = $request->input('name'); $way = $request->input('way','alipay'); if(empty($account) || empty($name)) return $this->failure("提现失败,请输入提现账号和真实姓名"); $res = MEarningAccount::where('m_user_id', $merchant_user->id)->where('is_banned', 1)->first(); if ($res) throw new \Exception("账号id: {$res->id}异常"); //检测余额是否充足 $balance = MEarningAccount::where('m_user_id', $merchant_user->id)->sum('balance'); $value = $request->input('value',0); if (empty($value)) return $this->failure("请输入提现金额"); if ($balance < $value) return $this->failure("提现失败,余额不足"); if ($value < 1) return $this->failure("提现失败,最低提现金额1元"); //提现 \DB::beginTransaction(); $accounts = MEarningAccount::where('m_user_id', $merchant_user->id)->where('balance', '>', 0)->orderBy('balance', 'desc')->get(); $remain_value = $value; $ratio = 1 - (Redis::get('withdrawal_poundage')??2) / 100; foreach ($accounts as $earning_account) { $withdraw_array = [ 'm_id'=>$earning_account->m_id, 'm_user_id'=>$earning_account->m_user_id, 'way'=>$way, 'account'=>$account, 'name'=>$name, 'trade_no'=>\CommonUtilsService::getTradeNO(), 'status'=>'freezing', 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s'), ]; if ($earning_account->balance >= $remain_value) { $withdraw_array['real_value'] = number_format($remain_value * $ratio, 2, '.', ''); $withdraw_array['value'] = $remain_value; MEarningwithdraws::insert($withdraw_array); $earning_account->increment('frozen_withdraw', $remain_value); $earning_account->decrement('balance', $remain_value); break; }else { $remain_value = $remain_value - $earning_account->balance; $withdraw_array['real_value'] = number_format($earning_account->balance * $ratio, 2, '.', ''); $withdraw_array['value'] = $earning_account->balance; MEarningwithdraws::insert($withdraw_array); $earning_account->increment('frozen_withdraw', $earning_account->balance); $earning_account->decrement('balance', $earning_account->balance); } } \DB::commit(); return $this->success('ok'); } catch (\Exception $e) { \DB::rollBack(); $this->getError($e); return $this->failure("服务器休息,请稍后再试"); } } //提现账号列表 public function saasTransferAccounts(Request $request){ try { //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; $merchant_user = $this->userByUnionid($unionid); if ($merchant_user == false) throw new \Exception('获取merchant_user失败. unionid='.$unionid); $way = $request->way ?? 'alipay'; $transfers = MEarningTransfers::where('m_user_id',$merchant_user->id)->where('way',$way)->select('id','m_user_id','way','account','pic','nick_name','name')->get(); return $this->success('ok',$transfers); } catch (\Exception $e) { $this->getError($e); return $this->failure("服务器休息,请稍后再试"); } } //绑定提现账号(支付宝) public function bindSaasTransferAccounts(Request $request){ try { //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; $merchant_user = $this->userByUnionid($unionid); if(!$merchant_user){ throw new \Exception('获取merchant_user失败,unionid='.$unionid); } if($request->merchant_id){ $merchant_id = $request->merchant_id; }else{ $merchant_id = MEarningAccount::where('m_user_id',$merchant_user->id)->orderBy('balance','desc')->value('m_id')?:0; } $way = $request->way ?? 'alipay'; $account = $request->account; $name = $request->name; if(empty($account) || empty($name)) return $this->failure("请完善提现信息"); $transfer = MEarningTransfers::where('m_user_id',$merchant_user->id)->where('name',$name)->where('account',$account)->first(); if($transfer) { $transfer->updated_at = date('Y-m-d H:i:s'); $transfer->save(); return $this->success('ok'); } $transfer = new MEarningTransfers(); $transfer->m_id = $merchant_id; $transfer->m_user_id = $merchant_user->id; $transfer->way = $way; $transfer->name = $name; $transfer->account = $account; $transfer->save(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure("服务器休息,请稍后再试"); } } public function saasAuthUrl(Request $request){ //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; $merchant_user = $this->userByUnionid($unionid); if ($merchant_user === false) throw new \Exception('获取merchant_user失败. unionid='.$unionid); if($merchant_user){ $m_user_id = $merchant_user->id; }else{ $m_user_id = MerchantUser::where('openid',$request->openid)->value('id'); } if($request->merchant_id){ $merchant_id = $request->merchant_id; }else{ $merchant_id = MEarningAccount::where('m_user_id',$m_user_id)->orderBy('balance','desc')->value('m_id'); } $jump_url = urlencode(env('APP_URL').'/h5/#/accountPage'); $share_url = env('APP_URL').'/api/official/live/wechat/oauth?merchant_id='.$merchant_id.'&account_id='.$m_user_id.'&auth_state=0&url='.$jump_url; return $this->success('ok',$share_url); } /** * 小程序收益账号 * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View|void * @throws \Exception */ public function earningAccount(Request $request) { $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; $wechat = Wechat::where('unionid', $unionid)->first(); if (empty($wechat) || empty($wechat->user)) return $this->success('ok', ['balance' => 0, 'withdrawl' => 0, 'is_wechat_auth' => 1, 'total_value' => 0, 'frezzing_value' => 0]); $user = $wechat->user; $balance = $withdrawl = $total_value = $frezzing_value = 0; $account = EarningAccount::where('user_id', $user->id)->first(); if ($account) { $balance = $account->balance; $withdrawl = $account->withdrawl; $total_value = $account->total_value; //冻结收益 $frezzing_value = $account->frozen_earning; } //最近30次提现记录 $near_withdraws = EarningWithdraw::where('status', '<>', 'canceled')->where('user_id', '<>', $user->id)->select('id', 'real_value', 'value', 'name')->orderBy('id', 'desc')->limit(30)->get(); foreach ($near_withdraws as $near_withdraw) { $near_withdraw->name = mb_substr($near_withdraw->name, 0, 1)."*"; } $poundage = Redis::get('withdrawal_poundage')??2; // $total_value = number_format($balance + $frezzing_value, 2, '.', ''); //提现账号 $account = EarningTransfer::where('user_id',$user->id)->select('id','user_id','name','nickname','pic','way','account','created_at','updated_at')->orderBy('updated_at','desc')->first(); return $this->success('ok',['balance'=>$balance, 'withdrawl'=>$withdrawl, 'is_wechat_auth'=>1, 'near_withdraws'=>$near_withdraws, 'poundage'=>$poundage, 'total_value'=>$total_value, 'frezzing_value'=>$frezzing_value,'account'=>$account]); } public function earningHistories(Request $request) { try { $is_wechat_auth = 1; //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; $wechat = Wechat::where('unionid', $unionid)->first(); $earnings = null; $value = 0; if (empty($wechat) || empty($wechat->user)) return $this->success('ok', compact('is_wechat_auth', 'earnings', 'value')); $user = $wechat->user; $earnings = DB::table('earnings')->where('user_id', $user->id)->selectRaw('user_id as e_user_id,order_id,earning_time,sum(value) as value, status, created_at')->groupBy('order_id'); $orders = DB::table('orders')->joinSub($earnings, 'ufutx_earnings', function($join) { $join->on('id', '=', 'earnings.order_id'); })->selectRaw('ufutx_earnings.*, user_id, type, id as orders_id, type_id, goods, ufutx_orders.created_at as o_created_at'); $earnings = DB::table('users')->joinSub($orders, 'ufutx_orders', function ($join) { $join->on('id','=', 'orders.user_id'); })->selectRaw('ufutx_orders.*, id as order_user_id,nickname,photo'); $value = \DB::table('earnings')->where('user_id', $user->id)->sum('value'); $earnings = $earnings->groupBy('order_id')->orderBy('created_at', 'desc')->paginate(); foreach ($earnings as $earning) { $text = '在'.$earning->o_created_at.'通过你的分享购买了【'.$earning->goods.'】'; $earning->text = $text; } return $this->success('ok', compact('is_wechat_auth', 'earnings', 'value')); }catch (\Exception $e) { $this->getError($e); return $this->failure(); } } /** * 提现记录 * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View */ public function withdrawHistories(Request $request) { try { //检查unio $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; // $unionid = "oVMWos64S25ILZN-eh-4HoCr7iss"; $is_wechat_auth = 1; $unionid = $result['unionid']; $wechat = Wechat::where('unionid', $unionid)->first(); $user = $wechat->user; if (empty($wechat) || empty($wechat->user)) { $withdraws = EarningWithdraw::where('user_id', null)->select('user_id', 'real_value', 'value', 'created_at', 'status', 'err_msg','way')->orderBy('id', 'desc')->paginate(); } else { $withdraws = EarningWithdraw::where('user_id', $user->id)->select('user_id', 'real_value', 'value', 'created_at', 'status', 'err_msg','way')->orderBy('id', 'desc')->paginate(); } return $this->success('ok', compact('is_wechat_auth', 'withdraws')); }catch (\Exception $e) { $this->getError($e); return $this->failure(); } } /** * 提现申请 * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View */ public function withdraw(Request $request) { try { //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); // $unionid = "oVMWos64S25ILZN-eh-4HoCr7iss"; $unionid = $result['unionid']; $wechat = Wechat::where('unionid', $unionid)->first(); if (empty($wechat) || empty($wechat->user)) return $this->failure("暂无可提现金额"); $user = $wechat->user; $account = $request->input("account"); $name = $request->input('name'); $way = $request->input('way','alipay'); if ($way == 'alipay') { if(empty($account) || empty($name)) return $this->failure("提现失败,请输入提现账号和真实姓名"); }elseif ($way == 'weixin') { $account = $result['openid']; $name = $user->nickname; } //检测余额是否充足 $earning_account = EarningAccount::where('user_id', $user->id)->first(); if (empty($earning_account)) return $this->failure("暂无可提现金额"); $value = $request->input('value',0); if (empty($value)) return $this->failure("请输入提现金额"); if ($earning_account->balance < $value) return $this->failure("提现失败,余额不足"); if ($value < 1) return $this->failure("提现失败,最低提现金额1元"); //提现 \DB::beginTransaction(); $remain_value = $value; $ratio = 1 - (Redis::get('withdrawal_poundage')??2) / 100; $withdraw = [ 'user_id'=>$earning_account->user_id, 'way'=>$way, 'account'=>$account, 'name'=>$name, 'trade_no'=>\CommonUtilsService::getTradeNO(), 'status'=>'freezing', 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s'), ]; $withdraw['real_value'] = number_format($remain_value * $ratio, 2, '.', ''); $withdraw['value'] = $remain_value; EarningWithdraw::insert($withdraw); $earning_account->increment('frozen_withdraw', $remain_value); $earning_account->decrement('balance', $remain_value); \DB::commit(); return $this->success('ok'); } catch (\Exception $e) { \DB::rollBack(); $this->getError($e); return $this->failure(); } } /** * 提现账号列表 * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View */ public function transferAccounts(Request $request){ try { //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; $wechat = Wechat::where('unionid', $unionid)->first(); if (empty($wechat) || empty($wechat->user)) throw new \Exception('获取merchant_user失败. unionid='.$unionid); $way = $request->way ?? 'alipay'; $transfers = EarningTransfer::where('user_id',$wechat->user->id)->select('id','user_id','way','account','pic','nickname','name')->get(); return $this->success('ok',$transfers); } catch (\Exception $e) { $this->getError($e); return $this->failure(); } } //绑定提现账号(支付宝) public function bindTransferAccounts(Request $request){ try { //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; $wechat = Wechat::where('unionid', $unionid)->first(); if (empty($wechat) || empty($wechat->user)) throw new \Exception('获取merchant_user失败. unionid='.$unionid); $user = $wechat->user; $way = $request->way ?? 'alipay'; $account = $request->account; $name = $request->name; if ($way == 'alipay') { if(empty($account) || empty($name)) return $this->failure("请完善提现信息"); }elseif ($way == 'weixin') { $account = $result['openid']; $name = null; } $transfer = EarningTransfer::where('user_id',$user->id)->where('name',$name)->where('account',$account)->first(); if(empty($transfer)) { $transfer = new EarningTransfer(); $transfer->user_id = $user->id; $transfer->way = $way; $transfer->name = $name; $transfer->account = $account; $transfer->save(); } return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure(); } } public function authUrl(Request $request){ try { //检查unionid $result = $this->checkUnionid(); if (empty($result)) throw new \Exception('获取微信unionid信息失败'); if (isset($result['is_wechat_auth'])) return $this->success('ok', $result); if (isset($result['error_msg'])) return $this->failure('ok', $result['error_msg']); $unionid = $result['unionid']; $wechat = Wechat::where('unionid', $unionid)->first(); if (empty($wechat) || empty($wechat->user)) throw new \Exception('获取user失败. unionid='.$unionid); $jump_url = urlencode(env('APP_URL').'/h5/#/loveMpWithdraw'); $share_url = env('APP_URL').'/api/official/earning/wechat/oauth?url='.$jump_url; return $this->success('ok',$share_url); }catch (\Exception $e) { $this->getError($e); return $this->failure(); } } }