| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 | <?phpnamespace 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' => '成功',        ]);    }}
 |