<?php namespace App\Http\Controllers\Api\Auth; 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 Illuminate\Support\Facades\Session; 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()); } }