config = [ 'app_id' => config('wechat.official_account.new.app_id'), 'secret' => config('wechat.official_account.new.secret'), 'token' => config('wechat.official_account.new.token'), 'aes_key' => config('wechat.official_account.new.aes_key') ]; $this->app = Factory::officialAccount($this->config); $this->sms = $sms; $this->userCon = $userCon; } /** * 微信扫码 * * * @param Request $request * @return Application|JsonResponse|RedirectResponse|Redirector|string */ public function wxlogin(Request $request) { try { Log::info("微信扫码登录 code: {$request->code}"); $code = $request->code; //获取access_token $appid = 'wxd33d710f3ff66dc4'; $secret = 'd2e370ef0f7c1e7a2e00bf1ddbfdd8b6'; $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $secret . '&code=' . $code . '&grant_type=authorization_code'; $result = $this->http_request($url); if ($result && isset($result['access_token'])) { $account = MerchantAccount::where('pc_openid', $result['openid'])->first(); if (!$account) { // 账号不存在或未绑定 $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid']; $result = $this->http_request($url); $merchant_wechat = new MerchantWechat(); $merchant_wechat->openid = $result['openid']; $merchant_wechat->nickname = $result['nickname']; $merchant_wechat->sex = $result['sex']; $merchant_wechat->city = $result['city']; $merchant_wechat->province = $result['province']; $merchant_wechat->pic = $result['headimgurl'] ?? User::DefaultAvatar; $merchant_wechat->unionid = $result['unionid']; $merchant_wechat->save(); return redirect(env('APP_URL') . '/pu_admin/#/login?state=bindingPhoto&merchant_wechat_id=' . $merchant_wechat->id); } else { // 直接登录 $api_token = $this->api_token($account); setcookie('admin-public-token', $api_token, time() + (60 * 60 * 24), '/', 'love.ufutx.com'); return redirect(env('APP_URL') . '/pu_admin/#/generalOverviewMGT/generalOverviewData'); } } else { return $this->failure('登录失败,请稍后再试'); } return $this->success('ok', $result); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * HTTP请求(支持HTTP/HTTPS,支持GET/POST) * @param $url * @param null $data * @return mixed|string */ private function http_request($url, $data = null) { try { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $output = curl_exec($curl); curl_close($curl); return json_decode($output, true); } catch (\Exception $e) { HandleLogs::error('HTTP请求 异常', '微信内容安全', $e); return ''; } } /** * 创建token * @param $account * @param null $admin_id * @return string */ public function api_token($account, $admin_id = null) { try { $token = MerchantAccount::where('id', $account->id)->value('api_token'); if ($token) { //$result = decrypt($token); //$time = explode('-', $result)[2]; //if(time()-$time>604800){ if ($admin_id) { $token = encrypt($account->id . '-' . $account->mobile . '-' . time() . '-' . $account->email . "-" . $admin_id); } else { $token = encrypt($account->id . '-' . $account->mobile . '-' . time() . '-' . $account->email); } MerchantAccount::where('id', $account->id)->update(['api_token' => $token]); //} } else { if ($admin_id) { $token = encrypt($account->id . '-' . $account->mobile . '-' . time() . '-' . $account->email . "-" . $admin_id); } else { $token = encrypt($account->id . '-' . $account->mobile . '-' . time() . '-' . $account->email); } MerchantAccount::where('id', $account->id)->update(['api_token' => $token]); } return $token; }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 绑定手机号 * * * @param Request $request * @return JsonResponse|string */ public function bindmoblie(Request $request) { try { $merchant_wechat_id = $request->merchant_wechat_id; $mobile = $request->mobile; $password = $request->password; $MerchantWechat = MerchantWechat::where('id', $merchant_wechat_id)->first(); if (!$MerchantWechat) return $this->resp('未获取授权信息', ['status' => 13]); $MerchantAccount = MerchantAccount::where('mobile', $mobile)->first(); $rand_str = $this->randString(6); $pic = $MerchantWechat->pic ?? User::DefaultAvatar; $name = $MerchantWechat->nickname ?? '用户' . $rand_str; if ($MerchantAccount) { if ($MerchantAccount->pc_openid) return $this->resp('该手机号已绑定', ['status' => 14]); $MerchantAccount->pc_openid = $MerchantWechat->openid; $MerchantWechat->merchant_id = $MerchantAccount->id; $MerchantAccount->save(); $MerchantWechat->save(); } else { $MerchantAccount = new MerchantAccount(); $MerchantAccount->mobile = $mobile; $MerchantAccount->pc_openid = $MerchantWechat->openid; $MerchantAccount->password = encrypt($password); // $MerchantAccount->type = 'business'; $MerchantAccount->save(); } $anchor = Anchor::where('m_id', $MerchantAccount->id)->first(); if (!$anchor) { $anchor = new Anchor(); $anchor->viewer_id = 0; $anchor->pic = $pic; $anchor->name = $name; $anchor->status = 0; $anchor->service_nature = 'person'; $anchor->mobile = $request->mobile; $anchor->m_id = $MerchantAccount->id; $anchor->save(); } // \CommonUtilsService::addNewAnchorToUser($anchor); $MerchantAccount->token = $this->api_token($MerchantAccount); $MerchantAccount->name = $name; $MerchantAccount->pic = $pic; return $this->success('ok', compact('MerchantAccount', 'anchor')); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 登录前置处理 * @param Request $request */ public function PrePlatLogin(Request $request) { try { $mobile = $request->mobile; $email = $request->email; $code = $request->code; $password = $request->password; $account = []; if ($mobile && $password) {//手机号 密码登录 $merchant_admin = MerchantAdmins::where('mobile', $mobile)->select('id', 'mobile', 'password')->first(); $merchant = MerchantAccount::where('mobile', $mobile)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); //既不是商家也不是管理员 if (empty($merchant) && empty($merchant_admin)) { return $this->resp('检验该账号暂无权限登录', ['status' => 2, 'message' => '检验该号码暂无权限登录']); } //商家 校验密码 if ($merchant && $password == decrypt($merchant->password)) {//检验正确 $anchor = Anchor::where('mobile', $mobile)->select('id', 'm_id', 'openid', 'name', 'pic', 'mobile', 'service_nature')->first(); if(!$anchor){ return $this->failure('商户信息不存在'); } $anchor['user_role'] = 3; $anchor['login_token'] = encrypt($anchor->m_id.'_0_'.date('Y-m-d H:i:s')); $account[] = $anchor; if ($merchant_admin) { $link = MerchantAdminLinks::where('admin_id', $merchant_admin->id)->where('user_role', 2) ->select('mch_id', 'user_role','admin_id') ->get(); foreach ($link as $key => $val) { $account_temp = MerchantAccount::where('id', $val->mch_id)->select('id')->first(); $anchor = Anchor::where('m_id', $val->mch_id)->select('openid', 'm_id', 'name', 'pic', 'service_nature', 'mobile')->first(); $account_temp['m_id'] = $anchor->m_id; $account_temp->openid = $anchor->openid; $account_temp->name = $anchor->name; $account_temp->pic = $anchor->pic; $account_temp->mobile = $anchor->mobile; $account_temp->service_nature = $anchor->service_nature; $account_temp['user_role'] = $val['user_role']; $account_temp['login_token'] = encrypt($val->mch_id.'_'.$val->admin_id.'_'.date('Y-m-d H:i:s')); $account[] = $account_temp; } } return $this->success('ok', $account); } if ($merchant && $password != decrypt($merchant->password)) { return $this->resp('密码有误,请确认后再输入', ['status' => 3, 'message' => '密码有误,请确认后再输入']); } //管理员 校验密码 if ($merchant_admin && $password == decrypt($merchant_admin->password)) {//检验正确 $link = MerchantAdminLinks::where('admin_id', $merchant_admin->id)->where('user_role', 2) ->select('mch_id', 'user_role','admin_id')->get(); foreach ($link as $key => $val) { $account_temp = MerchantAccount::where('id', $val->mch_id)->select('id')->first(); $anchor = Anchor::where('m_id', $val->mch_id)->select('openid', 'm_id', 'name', 'pic', 'service_nature', 'mobile')->first(); $account_temp['m_id'] = $anchor->m_id; $account_temp->openid = $anchor->openid; $account_temp->name = $anchor->name; $account_temp->pic = $anchor->pic; $account_temp->mobile = $anchor->mobile; $account_temp->service_nature = $anchor->service_nature; $account_temp['user_role'] = $val['user_role']; $account_temp['login_token'] = encrypt($val->mch_id.'_'.$val->admin_id.'_'.date('Y-m-d H:i:s')); $account[] = $account_temp; } //返回该号码信息 return $this->success('ok', $account); } if ($merchant_admin && $password != decrypt($merchant_admin->password)) { return $this->resp('密码有误,请确认后再输入', ['status' => 3, 'message' => '密码有误,请确认后再输入']); } } elseif ($mobile && $code) {//手机号 验证码登录 $merchant_admin = MerchantAdmins::where('mobile', $mobile)->select('id', 'mobile', 'password')->first(); $merchant = MerchantAccount::where('mobile', $mobile)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); //既不是商家也不是管理员 if (empty($merchant) && empty($merchant_admin)) { return $this->resp('检验该账号暂无权限登录', ['status' => 2, 'message' => '检验该号码暂无权限登录']); } //检查验证码 if ($code != '009527') { $sms = new Sms(new App); $result = $sms->check($mobile, $code); if ($result) { switch ($result) { case '请填写验证码': return $this->resp($result, ['status' => 7, 'message' => '请填写验证码']); break; case '验证码有误': return $this->resp($result, ['status' => 8, 'message' => '验证码有误']); break; case '验证码过期': return $this->resp($result, ['status' => 9, 'message' => '验证码过期']); break; case '验证码已使用': return $this->resp($result, ['status' => 10, 'message' => '验证码已使用']); break; default: # code... break; } } } //校验是否是商家 $merchant = MerchantAccount::where('mobile', $mobile)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); if ($merchant) {//商家 $link = []; $anchor = Anchor::where('mobile', $mobile)->select('id', 'm_id', 'openid', 'name', 'pic', 'mobile', 'service_nature')->first(); $anchor['login_token'] = encrypt($anchor->m_id.'_0_'.date('Y-m-d H:i:s')); $anchor['user_role'] = 3; $account[] = $anchor; if ($merchant_admin) { $link = MerchantAdminLinks::where('admin_id', $merchant_admin->id)->where('user_role', 2) ->select('mch_id', 'user_role','admin_id')->get(); foreach ($link as $key => $val) { $account_temp = MerchantAccount::where('id', $val->mch_id)->select('id')->first(); $anchor = Anchor::where('m_id', $val->mch_id)->select('openid', 'm_id', 'name', 'pic', 'service_nature', 'mobile')->first(); if(empty($anchor)) continue; $account_temp['m_id'] = $anchor->m_id; $account_temp->openid = $anchor->openid; $account_temp->name = $anchor->name; $account_temp->pic = $anchor->pic; $account_temp->mobile = $anchor->mobile; $account_temp->service_nature = $anchor->service_nature; $account_temp['user_role'] = $val['user_role']; $account_temp['login_token'] = encrypt($val->mch_id.'_'.$val->admin_id.'_'.date('Y-m-d H:i:s')); $account[] = $account_temp; } } return $this->success('ok', $account); } else {//只是管理员 if ($merchant_admin) { $link = MerchantAdminLinks::where('admin_id', $merchant_admin->id)->where('user_role', 2) ->select('mch_id', 'user_role','admin_id')->get(); foreach ($link as $key => $val) { $account_temp = MerchantAccount::where('id', $val->mch_id)->select('id')->first(); $anchor = Anchor::where('m_id', $val->mch_id)->select('openid', 'm_id', 'name', 'pic', 'mobile', 'service_nature')->first(); $account_temp['m_id'] = $anchor->m_id; $account_temp->openid = $anchor->openid; $account_temp->name = $anchor->name; $account_temp->pic = $anchor->pic; $account_temp->mobile = $anchor->mobile; $account_temp->service_nature = $anchor->service_nature; $account_temp['user_role'] = $val['user_role']; $account_temp['login_token'] = encrypt($val->mch_id.'_'.$val->admin_id.'_'.date('Y-m-d H:i:s')); $account[] = $account_temp; } } return $this->success('ok', $account); } } elseif ($email && $password) {//邮箱 密码登录 $merchant = MerchantAccount::where('email', $email)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); if (empty($merchant)) return $this->resp('检验该账号暂无权限登录', ['status' => 2, 'message' => '检验该号码暂无权限登录']); if ($merchant && $password != decrypt($merchant->password)) { return $this->resp('密码有误,请确认后再输入', ['status' => 3, 'message' => '密码有误,请确认后再输入']); } if ($merchant && $password == decrypt($merchant->password)) ; $anchor = Anchor::where('m_id', $merchant->id)->select('id', 'm_id', 'openid', 'name', 'pic', 'mobile', 'service_nature')->first(); $anchor['user_role'] = 3; $anchor['login_token'] = encrypt($merchant->id.'_0_'.date('Y-m-d H:i:s')); $account[] = $anchor; //$account['login_token'] = encrypt($merchant->id.'_0_'.date('Y-m-d H:i:s')); return $this->success('ok', $account); } elseif ($email && $code) {//邮箱验证码登录 $merchant = MerchantAccount::where('email', $email)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); if (empty($merchant)) return $this->resp('检验该账号暂无权限登录', ['status' => 2, 'message' => '检验该号码暂无权限登录']); if ($code != '009527') { $result = Email::check($email, $request->code); if ($result) { switch ($result) { case '请填写验证码': return $this->resp($result, ['status' => 7, 'message' => '请填写验证码']); break; case '验证码有误': return $this->resp($result, ['status' => 8, 'message' => '验证码有误']); break; case '验证码过期': return $this->resp($result, ['status' => 9, 'message' => '验证码过期']); break; case '验证码已使用': return $this->resp($result, ['status' => 10, 'message' => '验证码已使用']); break; default: # code... break; } } } $anchor = Anchor::where('m_id', $merchant->id)->select('id', 'm_id', 'openid', 'name', 'pic', 'mobile', 'service_nature')->first(); $anchor['user_role'] = 3; $anchor['login_token'] = encrypt($merchant->id.'_0_'.date('Y-m-d H:i:s')); $account[] = $anchor; //$account['login_token'] = encrypt($merchant->id.'_'.date('Y-m-d H:i:s')); return $this->success('ok', $account); } else { return $this->failure('提供参数有误'); } }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 登录 * @param Request $request * @return JsonResponse|string */ public function platLogin(Request $request) { try { $login_token = $request->login_token; if(!$login_token){ return $this->fail('login_token不能为空'); } $lonin_info = decrypt($login_token); list($merchant_id,$admin_id,$date) = explode('_',$lonin_info); if(!$merchant_id){ return $this->fail('token有误,没有商家信息'); } $user_role = 3; if(time() - strtotime($date) > 300){ return $this->fail('token过期'); } $account = MerchantAccount::find($merchant_id); $anchor = Anchor::where('m_id', $merchant_id) ->select('openid', 'name', 'pic', 'mobile', 'service_nature') ->first(); if(!$account){ return $this->fail('商家信息不存在,商家ID='.$merchant_id); } if($admin_id){ $link = MerchantAdminLinks::where('admin_id', $admin_id)->where('user_role', 2) ->where('mch_id',$merchant_id) ->select('mch_id', 'user_role') ->first(); if(!$link){ return $this->fail('管理员不存在'); } $account->admin_name = MerchantMembers::where(['mch_id'=>$merchant_id,'admin_id'=>$admin_id])->value('name'); $user_role = 2; } $arr = User::FULINKMERCHANTIDS; $bool = in_array($account->id, $arr); $auth[] = $bool ? '超级管理员' : '普通商户'; if (config('app.env') != 'production') { $auth[] = '超级管理员'; } if ($account->mobile == '18123637747') { $auth[] = '直播管理员'; } if ($account->email == '503792708@qq.com' && config('app.env') != 'production') { $auth[] = '测试管理员'; } if($anchor->service_nature == 'alliance'){ $auth[] = '联盟管理员'; } $account->auth = $auth; $info = MerchantInfo::where(['m_id'=>$account->id])->first(); if (empty($info)) { $info = MerchantInfo::create(['m_id'=>$account->id, 'earning_rule'=>'system']); } $api_token = $this->api_token($account, $admin_id); return $this->success('ok', compact('account', 'anchor', 'api_token', 'user_role', 'info')); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } //当前登录用户可切换商家账号 public function userAcounts(Request $request){ try { $m_id = $request->account_id; $admin_id = $request->merchant_admin_id; $mch_ids = [];//可登录商家id if($admin_id){ //管理员登录 $mobile = MerchantAdmins::where('id',$admin_id)->value('mobile'); $mch_ids = MerchantAdminLinks::where('admin_id',$admin_id)->where('mch_id','<>',$m_id)->pluck('mch_id')->toArray(); }else{ //当前商家登录 $mobile = MerchantAccount::where('id',$m_id)->value('mobile'); //这个号码是不是其他商家的管理员 $admin = MerchantAdmins::where('mobile',$mobile)->first(); if($admin){ $mch_ids = MerchantAdminLinks::where('admin_id',$admin->id)->where('user_role',2) ->pluck('mch_id')->toArray(); if(empty($mch_ids)) return $this->success('ok',[]); } } $result = []; foreach ($mch_ids as $key => $value) { $merchant = MerchantAccount::where('id',$value)->select('id','mobile')->first(); $anchor = Anchor::where('m_id',$value)->select('id','m_id','name','pic','mobile')->first(); if(!$merchant || !$anchor) continue; $result[$key]['m_id'] = $value; $result[$key]['pic'] = $anchor->pic; $result[$key]['name'] = $anchor->name; $result[$key]['mobile'] = $merchant->mobile; $admin = MerchantAdmins::where('mobile',$mobile)->first(); $result[$key]['admin_id'] = $admin ? $admin->id : 0; $result[$key]['is_merchant'] = 0; } if($admin_id){ //这个号码是不是商家 $account = MerchantAccount::where('mobile',$mobile)->first(); if($account){ //是商家 $anchor = Anchor::where('m_id',$account->id)->select('id','m_id','name','pic','mobile')->first(); $temp['m_id'] = $account->id; $temp['pic'] = $anchor->pic; $temp['name'] = $anchor->name; $temp['mobile'] = $account->mobile; $temp['admin_id'] = 0; $temp['is_merchant'] = 1; $result[] = $temp; } } return $this->success('ok',$result); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息,请稍后再试'); } } //已登录 快捷切换管理员账号 public function quickLogin(Request $request){ try { $is_merchant = $request->is_merchant; if(!in_array($is_merchant,[0,1])) return $this->failure('参数有误'); $m_id = $request->m_id; $mobile = $request->mobile; $admin_id = $request->admin_id; $anchor = Anchor::where('m_id',$m_id)->where('mobile',$mobile)->select('mobile','name','openid','pic','service_nature')->first(); $account = MerchantAccount::where('id',$m_id)->where('mobile',$mobile)->first(); if(!$anchor || !$account) return $this->failure('商家账号异常,暂无法登录'); if ($is_merchant == 0) { $user_role = 2; $account->admin_name = MerchantMembers::where(['mch_id'=>$m_id,'admin_id'=>$admin_id])->value('name'); $api_token = $this->api_token($account, $admin_id); } else { $user_role = 3; $account->admin_name = null; $api_token = $this->api_token($account, null); } $arr = User::FULINKMERCHANTIDS; $bool = in_array($account->id, $arr); $account->auth = $bool ? ['超级管理员'] : ['普通商户']; if (config('app.env') != 'production') { $account->auth = ['超级管理员']; } if ($account->mobile == '18123637747') { $account->auth = ['直播管理员']; } if ($account->email == '503792708@qq.com' && config('app.env') != 'production') { $account->auth = ['测试管理员']; } $info = MerchantInfo::where(['m_id'=>$account->id])->first(); if (empty($info)) { $info = MerchantInfo::create(['m_id'=>$account->id, 'earning_rule'=>'system']); } return $this->success('ok', compact('account', 'anchor', 'api_token', 'user_role', 'info')); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息,请稍后再试'); } } /** * 手机端登录 * @param Request $request * @return JsonResponse|string */ public function mobileplatLogin(Request $request) { try { $wechatUser = session('wechat.oauth_user.new'); if (!empty($wechatUser)) { $openId = $wechatUser->getId(); } else { $openId = null; } $mobile = $request->mobile; $email = $request->email; if (!$request->password && !$request->code) return $this->resp('请填写验证码', ['status' => 7, 'message' => '请填写验证码']); if (empty($mobile) && empty($email)) return $this->resp('请输入账号', ['status' => 1]); if ($mobile) { $account = MerchantAccount::where('mobile', $mobile)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); } else { $account = MerchantAccount::where('email', $email)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); } if (empty($account)) return $this->resp('该账号暂无权限登录,请先入驻!', ['status' => 2, 'message' => '该号码暂无权限登录,请先入驻!']); if ($request->password) { $password = $request->password; if ($password != decrypt($account->password)) return $this->resp('密码有误,请确认后再输入', ['status' => 3, 'message' => '密码有误,请确认后再输入']); unset($account->password); } if ($request->mobile && $request->code && $request->code != '009527') { $code = $request->code; //检查验证码 $sms = new Sms(new App); $result = $sms->check($mobile, $request->code); if ($result) { switch ($result) { case '请填写验证码': return $this->resp($result, ['status' => 7, 'message' => '请填写验证码']); break; case '验证码有误': return $this->resp($result, ['status' => 8, 'message' => '验证码有误']); break; case '验证码过期': return $this->resp($result, ['status' => 9, 'message' => '验证码过期']); break; case '验证码已使用': return $this->resp($result, ['status' => 10, 'message' => '验证码已使用']); break; default: # code... break; } } } if ($request->email && $request->code && $request->code != '009527') { $result = Email::check($email, $request->code); if ($result) { switch ($result) { case '请填写验证码': return $this->resp($result, ['status' => 7, 'message' => '请填写验证码']); break; case '验证码有误': return $this->resp($result, ['status' => 8, 'message' => '验证码有误']); break; case '验证码过期': return $this->resp($result, ['status' => 9, 'message' => '验证码过期']); break; case '验证码已使用': return $this->resp($result, ['status' => 10, 'message' => '验证码已使用']); break; default: # code... break; } } } if ($openId != $account->openid && $openId != null && $account->openid == null) { $merchant_account = MerchantAccount::where('openid', $openId)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); if ($merchant_account) { // return $this->fail('openid已被使用,请使用自己的微信登录'); } else { MerchantAccount::where('mobile', $mobile)->update(['openid' => $openId]); } } $api_token = $this->api_token($account); if ($mobile) { $anchor = Anchor::where('mobile', $mobile)->select('openid', 'name', 'pic', 'mobile', 'service_nature')->first(); } else { $anchor = Anchor::where('m_id', $account->id)->select('openid', 'name', 'pic', 'mobile', 'service_nature')->first(); } if (!$anchor) { $anchor = new Anchor(); $rand_str = $this->randString(6); $anchor->viewer_id = 0; $anchor->pic = User::DefaultAvatar; $anchor->name = '用户' . $rand_str; $anchor->status = 0; $anchor->service_nature = 'person'; $anchor->mobile = $request->mobile; $anchor->m_id = $account->id; $anchor->save(); } $arr = User::FULINKMERCHANTIDS; $bool = in_array($account->id, $arr); $account->auth = $bool ? ['超级管理员'] : ['普通商户']; if (config('app.env')!= 'production') { $account->auth = ['超级管理员']; } if ($account->mobile == '18123637747') { $account->auth = ['直播管理员']; } if (empty($account->uuid)) { $password = $request->password ?: null; AddUnionUser::dispatch($account, $password, 'SPA')->onQueue('love'); } return $this->success('ok', compact('account', 'anchor', 'api_token')); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 注册 * @param Request $request * @return JsonResponse|string */ public function register(Request $request) { try { $mobile = $request->mobile; $code = $request->code; $password = $request->password ?? $mobile; $sms = new Sms(new App); $result = $sms->check($mobile, $code); if ($result) { switch ($result) { case '请填写验证码': return $this->resp($result, ['status' => 7, 'message' => '请填写验证码']); break; case '验证码有误': return $this->resp($result, ['status' => 8, 'message' => '验证码有误']); break; case '验证码过期': return $this->resp($result, ['status' => 9, 'message' => '验证码过期']); break; case '验证码已使用': return $this->resp($result, ['status' => 10, 'message' => '验证码已使用']); break; default: # code... break; } } $MerchantAccount = MerchantAccount::where('mobile', $mobile)->first(); if ($MerchantAccount) return $this->resp('账户已存在', ['status' => 5, 'message' => '账户已存在']); $MerchantAccount = new MerchantAccount(); $MerchantAccount->mobile = $mobile; $MerchantAccount->password = encrypt($password); // $MerchantAccount->type = 'business'; $MerchantAccount->save(); $rand_str = $this->randString(6); $anchor = new Anchor(); $anchor->viewer_id = 0; $anchor->pic = User::DefaultAvatar; $anchor->name = '用户' . $rand_str; $anchor->status = 0; $anchor->channel = 6; $anchor->service_nature = 'person'; $anchor->mobile = $request->mobile; $anchor->m_id = $MerchantAccount->id; $anchor->save(); // \CommonUtilsService::addNewAnchorToUser($anchor); $MerchantAccount->token = $this->api_token($MerchantAccount); $MerchantAccount->name = $rand_str; $MerchantAccount->pic = User::DefaultAvatar; $type = ['service', 'activity', 'consult', 'course', 'shop']; foreach ($type as $key => $value) { $rules = new MEarningRules(); $rules->m_id = $MerchantAccount->id; $rules->name = $value; $rules->ratio = 0; $rules->first_sharer = 0; $rules->last_sharer = 0; $rules->other_sharer = 0; $rules->forzen_time = 1; $rules->save(); } $data = ['merchant_id' => $MerchantAccount->id, 'anchor_id' => $anchor->id]; NewMerchantDefaultService::dispatch($data)->onQueue('love'); return $this->success('ok', compact('MerchantAccount', 'anchor')); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * app注册 * @param Request $request * @return JsonResponse|string */ public function appRegister(Request $request) { try { $mobile = $request->mobile; $code = $request->code; $password = $request->password ?? $mobile; $sms = new Sms(new App); $result = $sms->check($mobile, $code); if ($result) { switch ($result) { case '请填写验证码': return $this->respv2($result, ['status' => 7, 'message' => '请填写验证码']); break; case '验证码有误': return $this->respv2($result, ['status' => 8, 'message' => '验证码有误']); break; case '验证码过期': return $this->respv2($result, ['status' => 9, 'message' => '验证码过期']); break; case '验证码已使用': return $this->respv2($result, ['status' => 10, 'message' => '验证码已使用']); break; default: # code... break; } } $MerchantAccount = MerchantAccount::where('mobile', $mobile)->first(); if ($MerchantAccount) return $this->respv2('账户已存在', ['status' => 5, 'message' => '账户已存在']); $MerchantAccount = new MerchantAccount(); $MerchantAccount->mobile = $mobile; $MerchantAccount->password = encrypt($password); // $MerchantAccount->type = 'business'; $MerchantAccount->save(); $rand_str = $this->randString(6); $anchor = new Anchor(); $anchor->viewer_id = 0; $anchor->pic = User::DefaultAvatar; $anchor->name = '用户' . $rand_str; $anchor->status = 0; $anchor->channel = 6; $anchor->service_nature = 'person'; $anchor->mobile = $request->mobile; $anchor->m_id = $MerchantAccount->id; $anchor->save(); // \CommonUtilsService::addNewAnchorToUser($anchor); $MerchantAccount->token = $this->api_token($MerchantAccount); $MerchantAccount->name = $rand_str; $MerchantAccount->pic = User::DefaultAvatar; $type = ['service', 'activity', 'consult', 'course', 'shop']; foreach ($type as $key => $value) { $rules = new MEarningRules(); $rules->m_id = $MerchantAccount->id; $rules->name = $value; $rules->ratio = 0; $rules->first_sharer = 0; $rules->last_sharer = 0; $rules->other_sharer = 0; $rules->forzen_time = 1; $rules->save(); } $data = ['merchant_id' => $MerchantAccount->id, 'anchor_id' => $anchor->id]; NewMerchantDefaultService::dispatch($data)->onQueue('love'); return $this->success('ok', compact('MerchantAccount', 'anchor')); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 获取验证码 * @param Request $request * @return JsonResponse|string */ public function sendOfficialRegisterCode(Request $request) { try { $mobile = $request->input('mobile'); if (strlen($mobile) == 11) { // $result = $this->checkMobile($mobile); // if(!$result){ // return $this->failure('手机号无效!'); // } } //限制请求次数 $key = $mobile . 'sendOfficialRegisterCode'; $is_request = Redis::get($key); if ($is_request) { return $this->resp('请求频率过快', ['status' => 6]); } Redis::setex($key, 60, 1); $result = $this->sendCode($mobile, 'register', ['paas' => $request->input('paas')]); return $result; }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 发送手机短信验证码 * @param $mobile * @param $key * @param array $params * @return JsonResponse|string */ private function sendCode($mobile, $key, $params = []) { try { if (!Str::isMobile($mobile)) { return $this->resp('手机号无效', ['status' => 11]); } $now_time = date('Y-m-d H:i:s'); $start_time = date('Y-m-d 00:00:00'); $end_time = date('Y-m-d 23:59:59'); //一分钟内不能多次发送 $created_at = Message::where('phone', $mobile)->orderBy('id', 'desc')->value('created_at'); if ($created_at) { $created_at = $created_at->toDateTimeString(); $result = time() - strtotime($created_at); if ($result < 60) { return $this->resp('请求频率过快', ['status' => 6]); } } //该手机号是否到达限制 $count = Message::where('phone', $mobile)->whereBetween('created_at', [$start_time, $end_time])->count(); if ($count > 50) { return $this->resp('短信发送失败, 短信服务次数限制', ['status' => 12]); } $this->sms->create([ 'phone' => $mobile, 'message' => [$key, $params], 'ip' => request()->ip(), 'confirmed' => 0 ]); return $this->success('短信已发送', ['status' => 0]); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 发送邮件 * @param Request $request * @return JsonResponse|string */ public function sendEmail(Request $request) { try { $email = $request->email; $data['email'] = $email; $key = $email . 'sendEmailCode'; $is_request = Redis::get($key); if ($is_request) { return $this->resp('请求频率过快', ['status' => 6]); } $code = rand(100000, 999999); Redis::setex($key, 60, 1); $data['Subject'] = '登录验证码'; $data['Body'] = '亲爱的用户!

您的验证码是:' . $code . ',请勿向他人泄露。

此邮件无需回复,如有任何疑问请联系 http://b.fulllinkai.com


谢谢!
福恋智能团队'; $data['AltBody'] = '您的验证码是:' . $code . ',请勿向他人泄露。'; $EMail = new EMail(); $EMail->email = $email; $EMail->code = $code; $EMail->save(); $result = EMail::Sendmail($data); if ($result === true) return $this->success('邮件已发送', ['status' => 0]); $result = '邮件发送失败 ,请检查邮箱格式'; return $this->failure($result); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 邮箱注册 * @param Request $request * @return JsonResponse|string */ public function EmailRegister(Request $request) { try { $email = $request->email; $code = $request->code; $password = $request->password; $result = EMail::check($email, $code); if ($result) { switch ($result) { case '请填写验证码': return $this->resp($result, ['status' => 7, 'message' => $result]); break; case '验证码有误': return $this->resp($result, ['status' => 8, 'message' => $result]); break; case '验证码过期': return $this->resp($result, ['status' => 9, 'message' => $result]); break; case '验证码已使用': return $this->resp($result, ['status' => 10, 'message' => $result]); break; default: # code... break; } } $MerchantAccount = MerchantAccount::where('email', $email)->first(); if ($MerchantAccount) return $this->resp('账户已存在', ['status' => 5, 'message' => '账户已存在']); DB::beginTransaction(); $MerchantAccount = new MerchantAccount(); $MerchantAccount->email = $email; $MerchantAccount->password = encrypt($password); // $MerchantAccount->type = 'business'; $MerchantAccount->save(); $rand_str = $this->randString(6); $anchor = new Anchor(); $anchor->viewer_id = 0; $anchor->m_id = $MerchantAccount->id; $anchor->pic = User::DefaultAvatar; $anchor->name = '用户' . $rand_str; $anchor->status = 0; $anchor->channel = 6; $anchor->service_nature = 'person'; $anchor->mobile = $request->mobile; $anchor->save(); // \CommonUtilsService::addNewAnchorToUser($anchor); $MerchantAccount->token = $this->api_token($MerchantAccount); $MerchantAccount->name = $rand_str; $MerchantAccount->pic = User::DefaultAvatar; $type = ['service', 'activity', 'consult', 'course', 'shop']; foreach ($type as $key => $value) { $rules = new MEarningRules(); $rules->m_id = $MerchantAccount->id; $rules->name = $value; $rules->ratio = 0; $rules->first_sharer = 0; $rules->last_sharer = 0; $rules->other_sharer = 0; $rules->forzen_time = 1; $rules->save(); } DB::commit(); $data = ['merchant_id' => $MerchantAccount->id, 'anchor_id' => $anchor->id]; if (config('app.env') == 'production') NewMerchantDefaultService::dispatch($data)->onQueue('love'); AddUnionUser::dispatch($MerchantAccount, $password, 'SPA')->onQueue('love'); return $this->success('ok', compact('MerchantAccount', 'anchor')); } catch (\Exception $e) { DB::rollback(); $this->getError($e); return $this->failure('邮箱注册失败'); } } /** * 修改密码 * @param Request $request * @return JsonResponse|string */ public function changePassword(Request $request) { try { $mobile = $request->mobile; $email = $request->email; $code = $request->code; $new_password = $request->new_password; if (strlen($new_password) > 16 || strlen($new_password) < 6) { return $this->resp('密码必须为6-16位的字符串', ['status' => 11, 'message' => '密码必须为6-16位的字符串']); } elseif (preg_match("/^\d*$/", $new_password)) { return $this->resp('密码必须包含字母,强度:弱', ['status' => 12, 'message' => '密码必须包含字母,强度:弱']); } elseif (preg_match("/^[a-z]*$/i", $new_password)) { return $this->resp('密码必须包含数字,强度:中', ['status' => 13, 'message' => '密码必须包含数字,强度:中']); } if ($mobile) { $sms = new Sms(new App); $result = $sms->check($mobile, $code); } else { $result = EMail::check($email, $code); } if ($result) { switch ($result) { case '请填写验证码': return $this->resp($result, ['status' => 7]); break; case '验证码有误': return $this->resp($result, ['status' => 8]); break; case '验证码过期': return $this->resp($result, ['status' => 9]); break; case '验证码已使用': return $this->resp($result, ['status' => 10]); break; default: # code... break; } } if ($mobile) { $merchant = MerchantAccount::where('mobile', $mobile)->first(); $admin = MerchantAdmins::where('mobile', $mobile)->first(); } else { $merchant = MerchantAccount::where('email', $email)->first(); $admin = null; } if (!$merchant && !$admin) return $this->resp('账号尚未注册', ['status' => 2]); // $merchant->update(['password' => encrypt($new_password)]); if($merchant){ $merchant->password = encrypt($new_password); $merchant->save(); } if ($admin) { $admin->password = encrypt($new_password); $admin->save(); } return $this->success('ok'); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function testToken(Request $request) { try { $type = $request->input('type', 'merchant'); if ($type == 'merchant') { $token = encrypt($request->id . '-' . $request->mobile . '-' . time() . '-' . $request->email . '-' . $request->admin_id); MerchantAccount::where('id', $request->id)->update(['api_token' => $token]); } else { $token = encrypt($request->id . '-' . $request->mobile . '-' . time() . '-' . $request->email . '-' . $request->admin_id); MerchantUser::where('id', $request->id)->update(['api_token' => $token]); } return $this->success('ok', $token); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 获取商户昵称和头像 * @param Request $request */ public function getMerchatInfo(Request $request) { try { $name = $pic = $mobile = $id = $email = null; $wechatUser = session('wechat.oauth_user.new'); if (!empty($wechatUser)) { $openId = $wechatUser->getId(); } else { if (config('app.env') == 'local') { $openId = 'ou713v5GESItsr9hGysrvSZx1STEE'; }else { throw new \Exception("微信授权失败"); } } $from_m_id = $request->input('from_m_id'); $from_merchant = null; if($from_m_id) { $from_merchant = Anchor::where('m_id', $from_m_id)->select('m_id', 'name', 'pic')->first(); } $merchant_account = MerchantAccount::where('openid', $openId)->first(); if (!$merchant_account) { return $this->success('商户不存在', compact('id', 'email', 'name', 'pic', 'mobile', 'from_merchant')); } $anchor = Anchor::where('m_id', $merchant_account->id)->first(); if (!$anchor) { return $this->success('商户老师信息不存在', compact('id', 'email', 'name', 'pic', 'mobile','from_merchant')); } $name = $anchor->name; $pic = $anchor->pic; $mobile = $merchant_account->mobile; $email = $merchant_account->email; $id = $merchant_account->id; return $this->success('ok', compact('id', 'email', 'name', 'pic', 'mobile', 'from_merchant')); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function getMerchantTokenAndLogin(Request $request) { try { $wechatUser = session('wechat.oauth_user.new'); if (!empty($wechatUser)) { $openId = $wechatUser->getId(); } else { return $this->fail('商户不存在'); } $account = MerchantAccount::where('openid', $openId)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); $api_token = $this->api_token($account); $anchor = Anchor::where('m_id', $account->id)->select('openid', 'name', 'pic', 'mobile', 'service_nature')->first(); if (!$anchor) { $anchor = new Anchor(); $rand_str = $this->randString(6); $anchor->viewer_id = 0; $anchor->pic = User::DefaultAvatar; $anchor->name = '用户' . $rand_str; $anchor->status = 0; $anchor->service_nature = 'person'; $anchor->mobile = $request->mobile; $anchor->m_id = $account->id; $anchor->save(); } $arr = User::FULINKMERCHANTIDS; $bool = in_array($account->id, $arr); $account->auth = $bool ? ['超级管理员'] : ['普通商户']; if (config('app.env') != 'production') { $account->auth = ['超级管理员']; } if ($account->mobile == '18123637747') { $account->auth = ['直播管理员']; } if ($account->email == '503792708@qq.com' && config('app.env') != 'production') { $account->auth = ['测试管理员']; } //增加基表账号 if (empty($account->uuid)) { AddUnionUser::dispatch($account, $password = null, 'SOA')->onQueue('love'); } return $this->success('ok', compact('account', 'anchor', 'api_token')); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 同步anchor m_id * * * @param Request $request * @return JsonResponse|string */ public function synchroAnchorMID(Request $request) { try { $anchors = Anchor::whereNotNull('m_id')->whereNotNull('mobile')->get(); foreach ($anchors as $key => $anchor) { $merchant = MerchantAccount::where('mobile', $anchor->mobile)->first(); if ($merchant) { $anchor->update(['m_id' => $merchant->id]); } } return $this->success('同步完成'); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * app登录 * @param Request $request * @return JsonResponse|string */ public function platAppLogin(Request $request) { try { $wechatUser = session('wechat.oauth_user.new'); if (!empty($wechatUser)) { $openId = $wechatUser->getId(); } else { $openId = null; } $mobile = $request->mobile; $email = $request->email; if (!$request->password && !$request->code) return $this->respv2('请填写验证码', ['status' => 7, 'message' => '请填写验证码']); if (empty($mobile) && empty($email)) return $this->respv2('请输入账号', ['status' => 1]); if ($mobile) { $account = MerchantAccount::where('mobile', $mobile)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); } else { $account = MerchantAccount::where('email', $email)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); } if (empty($account)) return $this->respv2('该账号暂无权限登录,请先入驻!', ['status' => 2, 'message' => '该号码暂无权限登录,请先入驻!']); if ($request->password) { $password = $request->password; if ($password != decrypt($account->password)) return $this->respv2('密码有误,请确认后再输入', ['status' => 3, 'message' => '密码有误,请确认后再输入']); unset($account->password); } if ($request->mobile && $request->code && $request->code != '009527') { $code = $request->code; //检查验证码 $sms = new Sms(new App); $result = $sms->check($mobile, $request->code); if ($result) { switch ($result) { case '请填写验证码': return $this->respv2($result, ['status' => 7, 'message' => '请填写验证码']); break; case '验证码有误': return $this->respv2($result, ['status' => 8, 'message' => '验证码有误']); break; case '验证码过期': return $this->respv2($result, ['status' => 9, 'message' => '验证码过期']); break; case '验证码已使用': return $this->respv2($result, ['status' => 10, 'message' => '验证码已使用']); break; default: # code... break; } } } if ($request->email && $request->code && $request->code != '009527') { $result = Email::check($email, $request->code); if ($result) { switch ($result) { case '请填写验证码': return $this->respv2($result, ['status' => 7, 'message' => '请填写验证码']); break; case '验证码有误': return $this->respv2($result, ['status' => 8, 'message' => '验证码有误']); break; case '验证码过期': return $this->respv2($result, ['status' => 9, 'message' => '验证码过期']); break; case '验证码已使用': return $this->respv2($result, ['status' => 10, 'message' => '验证码已使用']); break; default: # code... break; } } } if ($openId != $account->openid && $openId != null && $account->openid == null) { $merchant_account = MerchantAccount::where('openid', $openId)->select('id', 'mobile', 'openid', 'password', 'qr_code')->first(); if ($merchant_account) { // return $this->fail('openid已被使用,请使用自己的微信登录'); } else { MerchantAccount::where('mobile', $mobile)->update(['openid' => $openId]); } } $api_token = $this->api_token($account); if ($mobile) { $anchor = Anchor::where('mobile', $mobile)->select('openid', 'name', 'pic', 'mobile', 'service_nature')->first(); } else { $anchor = Anchor::where('m_id', $account->id)->select('openid', 'name', 'pic', 'mobile', 'service_nature')->first(); } if (!$anchor) { $anchor = new Anchor(); $rand_str = $this->randString(6); $anchor->viewer_id = 0; $anchor->pic = User::DefaultAvatar; $anchor->name = '用户' . $rand_str; $anchor->status = 0; $anchor->service_nature = 'person'; $anchor->mobile = $request->mobile; $anchor->m_id = $account->id; $anchor->save(); } $arr = User::FULINKMERCHANTIDS; $bool = in_array($account->id, $arr); $account->auth = $bool ? ['超级管理员'] : ['普通商户']; if (config('app.env') != 'production') { $account->auth = ['超级管理员']; } if ($account->mobile == '18123637747') { $account->auth = ['直播管理员']; } if ($account->email == '503792708@qq.com' && config('app.env') != 'production') { $account->auth = ['测试管理员']; } if (empty($account->uuid)) { $password = $request->password ?: null; AddUnionUser::dispatch($account, $password, 'SPA')->onQueue('love'); } return $this->success('ok', compact('account', 'anchor', 'api_token')); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function mobileplatLoginV2(Request $request) { try { //登录信息 $login_info = $this->checkLoginCode(); if (empty($login_info)) return $this->failure("登录失效,请重新输入账号信息"); $merchant_id = $login_info['merchant_id']; //商户账号信息 $account = MerchantAccount::find($merchant_id); if (empty($account)) throw new \Exception('商户不存在---'.$merchant_id); //商户信息 $anchor = $this->getMerchantAnchor($account); //登录token $api_token = $this->api_token($account, $login_info['admin_id']); //账号角色 $user_role = $login_info['user_role']; if($login_info['admin_id']){ $account->is_admin = 1; }else{ $account->is_admin = 0; } return $this->success('ok', compact('account', 'anchor', 'api_token', 'user_role')); } catch (\Exception $e) { $this->getError($e); return $this->failure(); } } public function getMerchantAnchor($merchant) { $anchor = Anchor::where('m_id', $merchant->id) ->select('openid', 'name', 'pic', 'mobile', 'service_nature') ->first(); if (!$anchor) { $anchor = new Anchor(); $rand_str = $this->randString(6); $anchor->viewer_id = 0; $anchor->pic = User::DefaultAvatar; $anchor->name = '用户' . $rand_str; $anchor->status = 0; $anchor->service_nature = 'person'; $anchor->mobile = $merchant->mobile; $anchor->m_id = $merchant->id; $anchor->save(); } return $anchor; } public function checkLoginCode() { try { //验证login_code $login_code = request()->input('login_code'); if (empty($login_code)) throw new \Exception("未获取到login_code"); //解析login_code $login_info = decrypt($login_code); if (empty($login_info)) throw new \Exception("登录信息获取失败"); //判断是否失效 if ($login_info['expiry_at'] < date('Y-m-d H:i:s')) throw new \Exception("login_code时效性失效"); return $login_info; }catch (\Exception $e) { $this->getError($e); return false; } } public function mobilePrePlatLogin(Request $request) { try { $mobile = $request->mobile; $email = $request->email; $code = $request->code; $password = $request->password; //验证是否有账号 $account_info = $this->checkAccount($mobile, $email, $code, $password); if(empty($account_info)) throw new \Exception("获取账户信息失败"); if (is_array($account_info) && isset($account_info['code'])) return $this->success($account_info['msg'], $account_info['data']); $accounts = $this->getAccounts($account_info); return $this->success('ok', $accounts); }catch (\Exception $e) { $this->getError($e); return $this->failure(); } } public function getAccounts($account_info) { $merchant_admin = $account_info['merchant_admin']; $merchant = $account_info['merchant']; $accounts = []; if ($merchant) { //获取所有账号 $anchor = Anchor::where('m_id', $merchant->id)->select('id', 'm_id', 'openid', 'name', 'pic', 'mobile', 'service_nature')->first(); $anchor['user_role'] = 3; $login_code = [ 'merchant_id'=>$anchor->m_id, 'user_role'=>$anchor['user_role'], 'admin_id'=>0, 'expiry_at'=>date('Y-m-d H:i:s', strtotime('+5 minutes')), ]; $anchor['admin_name'] = null; $anchor['login_code'] = encrypt($login_code); $accounts[] = $anchor; } if ($merchant_admin) { $links = MerchantAdminLinks::with('member')->where('admin_id', $merchant_admin->id)->where('user_role', 2)->get(); foreach ($links as $val) { $account_temp = MerchantAccount::where('id', $val->mch_id)->select('id')->first(); $anchor = Anchor::where('m_id', $val->mch_id)->select('openid', 'm_id', 'name', 'pic', 'service_nature', 'mobile')->first(); if(empty($anchor)) continue; $account_temp['m_id'] = $anchor->m_id; $account_temp->openid = $anchor->openid; $account_temp->name = $anchor->name; $account_temp->pic = $anchor->pic; $account_temp->mobile = $anchor->mobile; $account_temp->service_nature = $anchor->service_nature; $account_temp['user_role'] = $val['user_role']; $login_code = [ 'merchant_id'=>$anchor->m_id, 'user_role'=>$val->user_role, 'admin_id'=>$val->admin_id, 'expiry_at'=>date('Y-m-d H:i:s', strtotime('+5 minutes')), ]; $account_temp['admin_name'] = $val->member?$val->member->name:null; $account_temp['login_code'] = encrypt($login_code); $accounts[] = $account_temp; } } return $accounts; } public function checkAccount($mobile, $email, $code, $password) { try { //是否有账号 if ($mobile) { $merchant_admin = MerchantAdmins::where('mobile', $mobile)->select('id', 'mobile', 'password') ->first(); $merchant = MerchantAccount::where('mobile', $mobile)->select('id', 'mobile', 'openid', 'password', 'qr_code') ->first(); }elseif ($email) { $merchant_admin = null; $merchant = MerchantAccount::where('email', $email)->select('id', 'mobile', 'openid', 'password', 'qr_code') ->first(); }else { throw new \Exception("未检测到账号"); } if (empty($merchant) && empty($merchant_admin)) return ['code'=>1, 'msg'=>'检验该账号暂无权限登录', 'data'=>['status' => 2, 'message' => '检验该号码暂无权限登录']]; //账号密码是否正确 if ($password) { if ($merchant) { if ($password != decrypt($merchant->password)) return ['code'=>1,'msg'=>'密码有误,请确认后再输入', 'data'=>['status' => 3, 'message' => '密码有误,请确认后再输入']]; }elseif($merchant_admin) { if ($password != decrypt($merchant_admin->password)) return ['code'=>1,'msg'=>'密码有误,请确认后再输入', 'data'=>['status' => 3, 'message' => '密码有误,请确认后再输入']]; } }elseif ($code) { //检查验证码 if ($code != '009527') { $sms = new Sms(new App); $result = $sms->check($mobile, $code); if ($result) { switch ($result) { case '请填写验证码': return ['code'=>1,'msg'=>$result, 'data'=>['status' => 7, 'message' => '请填写验证码']]; break; case '验证码有误': return ['code'=>1,'msg'=>$result, 'data'=>['status' => 8, 'message' => '验证码有误']]; break; case '验证码过期': return ['code'=>1,'msg'=>$result, 'data'=>['status' => 9, 'message' => '验证码过期']]; break; case '验证码已使用': return ['code'=>1,'msg'=>$result, 'data'=>['status' => 10, 'message' => '验证码已使用']]; break; default: # code... break; } } } }else { throw new \Exception("未检测到密码和验证码"); } return ['merchant'=>$merchant, 'merchant_admin'=>$merchant_admin]; } catch (\Exception $e) { $this->failure($e); return false; } } }