<?php namespace App\Http\Controllers\Api\Auth; use App\Models\Company; use App\Models\Member; use App\Models\MemberInfo; use App\Models\ThirdToken; use App\Models\WechatAuth; use Illuminate\Http\Request; use App\Http\Controllers\Api\ApiBaseController; use Illuminate\Support\Facades\Validator; use App\Services\Auth\AuthService; use Illuminate\Support\Facades\Auth; use App\Services\Common\WechatService; class AuthController extends ApiBaseController { /** * @var AuthService */ protected $authService; private $wechatService; /** * LoginController constructor. * @param AuthService $authService * @param WechatService $wechatService * @param SmsService $smsService * @param GeetestService $geetestService */ public function __construct( AuthService $authService, WechatService $wechatService ) { $this->authService = $authService; $this->wechatService = $wechatService; } public function loginByAccount(Request $request) { //基础信息的检查 $rules = [ 'account' => 'required', 'password' => 'required', ]; $messages = [ 'account.required' => '请输入用户名', 'password.required' => '请输入密码', ]; $create_data = $request->all(); $validator = Validator::make($create_data, $rules, $messages); if ($validator->fails()) { $msg = $validator->errors()->all(); return response()->json(['status' => 0, 'msg' => $msg[0]]); } else { if (!$member = $this->authService->loginByAccount($request->account, $request->password, $request->autoLogin)) { return $this->sendErrorResponse("账号或密码错误", []); } if ($member->status == 0) { Auth::guard('api-member')->logout(); return $this->sendErrorResponse("你的账号处于封禁状态, 请联系管理员"); } return response()->json([ 'message' => 'Successfully created user!', ], 201); } } /** * 微信登录中转 * $state 自定义参数 * $url 回调地地 */ public function wechatAuth(Request $request) { //获取参数 $app_id = subsite_config('aix.system.oauth.wechat_official.app_id'); $redirect_uri = urlencode(route('api.auth.wechat_auth_back')); $url = $request->input('url', ''); if (empty($url)) { return response()->json(['status' => 0, 'msg' => '请调写回调地址']); } $state = $request->input('state', ''); //存参数 $auth = WechatAuth::create(['url' => $url, 'state' => $state]); //微信授权 $wechat_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$app_id}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state={$auth['id']}#wechat_redirect"; return redirect($wechat_url); } /** * 微信回调 */ public function wechatAuthBack(Request $request) { //微信登录 $officialAccount = $this->wechatService->getOfficialAccount(); $wechatUser = $officialAccount->oauth->user()->getOriginal(); //回调 $id = $request->input('state'); $auth = WechatAuth::where('id', $id)->first(); $wechatUser['state'] = $auth['state']; unset($wechatUser['privilege']); //循环拼接表单项 $formItemString = ''; foreach ($wechatUser as $key => $value) { $formItemString .= "<input name='{$key}' type='text' value='{$value}'/>"; } //构造表单并跳转 $content = <<<EOF <form style= 'display:none' name= 'submit_form' id= 'submit_form' action= '{$auth["url"]}' method= 'post' > { $formItemString } </form> <script type= "text/javascript" > document.submit_form.submit(); </script> EOF; exit ($content); } public function test(Request $request) { dd($request->post()); } /** * 根据token获取信息 */ public function getInfoByToken(Request $request) { $token = $request->header('token'); if (empty($token)) { return response()->json([ 'code' => 2, 'message' => '请输入token', ]); } $token_info = ThirdToken::where('token', $token)->first(); if (empty($token_info)) { return response()->json([ 'code' => 2, 'message' => 'token错误', ]); } $expire = strtotime($token_info['expire_at']); if ($expire < time()) { return response()->json([ 'code' => 2, 'message' => 'token已过期', ]); } if ($token_info['id'] != 130) { $token_info->expire_at = date('Y-m-d H:i:s', time() + 7200); $token_info->save(); } if ($token_info['type'] == 1) { $member = Member::where('id', $token_info['type_id'])->first(); $member_info = MemberInfo::where('uid', $token_info['type_id'])->first(); $info = [ 'id' => $token_info['type_id'], 'type' => 1, 'realname' => $member_info['realname'], 'avatar' => $member['avatars'] ? upload_asset($member['avatars']) : '', 'sex' => $member_info['sex'], 'mobile' => $member['mobile'], 'email' => $member['email'], ]; } elseif ($token_info['type'] == 2) { $company = Company::where('id', $token_info['type_id'])->first(); $info = [ 'id' => $token_info['type_id'], 'type' => 2, 'companyname' => $company['companyname'], 'logo' => $company['logo'] ? upload_asset($company['logo']) : '', 'mobile' => $company['mobile'], 'email' => $company['email'], 'address' => $company['address'], 'contact' => $company['contact'], ]; } return response()->json([ 'code' => 1, 'data' => $info, 'message' => '成功', ]); } }