123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- <?php
- namespace App\Http\Controllers;
- use App\Models\SoapUser;
- use App\Models\Store;
- use Illuminate\Http\Request;
- use App\Models\User;
- use App\Models\Smslog;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\Log;
- use Tymon\JWTAuth\Facades\JWTAuth;
- use Overtrue\EasySms\EasySms;
- use GuzzleHttp\Client;
- use Carbon\Carbon;
- use EasyWeChat\Factory;
- use Overtrue\EasySms\PhoneNumber;
- class AuthController extends Controller
- {
- //账号密码登录
- public function login(Request $request){
- $phone = $request->input('phone');
- $password = $request->input('password');
- $user=User::where('mobile',$phone)->first();
- if(!$user){
- return $this->error('450001','账号不存在');
- }
- if (!empty($user->deleted_at)){
- return $this->error('450001','账号已删除');
- }
- if ($user->status==1){
- return $this->error('450001','账号已禁用');
- }
- if(md5($password) != $user->password){
- return $this->error('450001','密码有误');
- }
- $token = Auth::guard('api')->fromUser($user);
- $data['token'] =$token;
- $data['user'] =$user;
- return $this->success($data);
- }
- public function sendCode(Request $request)
- {
- $phone = $request->input('phone');
- $area_code = $request->input('area_code','+86');
- $time = 10;
- if(strlen($phone)==11){
- $code = mb_substr($phone, 3, 2) . mb_substr($phone, 8, 2) . mb_substr($phone, 6, 2);
- }else{
- $code = mb_substr($phone,3,2).mb_substr($phone, 1, 2) . mb_substr($phone, 6, 2);
- }
- $number = new PhoneNumber($phone, $area_code);
- try {
- $sms = new EasySms(config('easysms'));
- $sms->send($number, [
- 'content' => "【大卫博士】您的验证码为{$code},请在{$time}分钟内输入验证码!如非本人操作,请忽略此条短信。"
- ]);
- $data = ['phone' => $phone, 'code' => $code,'area_code'=>$area_code];
- Smslog::create($data);
- $key = 'verificationCode_' . MD5($area_code.'-'.$phone);
- $expiredAt = Carbon::now()->addMinutes(10);
- Cache::put($key, ['phone' => $phone, 'code' => $code], $expiredAt); // 缓存验证码 10分钟过期。
- return $this->success($code);
- } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
- $message = $exception->getException('qcloud')->getMessage();
- Log::error('{短信发送错误------------}' . $message . '{---------------短信发送错误}');
- return $this->error('450001', $message);
- }
- }
- public function verifyLogin(Request $request){
- $phone = $request->input('phone');
- $area_code = $request->input('area_code','+86');
- $verify_code = $request->input('verify_code');
- $openid = $request->input('openid',null);
- if(SoapUser::where('phone',$phone)->exists()){
- return $this->error('450001','该手机号已被绑定');
- }
- $user=User::where('mobile',$phone)->first();
- if(empty($user)){
- return $this->error('450001','账号不存在');
- }
- if (!empty($user->deleted_at)){
- return $this->error('450001','账号已删除');
- }
- if ($user->status==1){
- return $this->error('450001','账号已禁用');
- }
- //短信登录
- $verify_key = 'verificationCode_' . MD5($area_code.'-'.$phone);
- $verifyData = Cache::get($verify_key);
- if (!$verifyData) {
- return $this->error('450001','验证码失效');
- }
- if(!hash_equals($verifyData['code'], $verify_code)){
- return $this->error('450001','验证码有误');
- }
- Cache::forget($verify_key);
- if($openid){
- $soap_user=SoapUser::where('openid',$openid)->first();
- if($soap_user){
- if($soap_user->phone){
- return $this->error('450001','该微信号已被绑定');
- }else{
- $soap_user->area_code = $area_code;
- $soap_user->phone = $phone;
- $soap_user->nickname = $user->nickname;
- $soap_user->headimgurl = $user->headimgurl;
- $soap_user->level = $user->level;
- $soap_user->user_id = $user->id;
- $soap_user->recom_id = $user->recom_id;
- $soap_user->agent_id = $user->agent_id;
- $soap_user->crown_id = $user->crown_id;
- $soap_user->warea_id = $user->warea_id;
- $soap_user->save();
- }
- }else{
- $soap_user = SoapUser::create([
- 'area_code'=>$area_code,
- 'phone'=>$phone,
- 'openid'=>$openid,
- 'nickname'=>$user->nickname,
- 'headimgurl'=>$user->headimgurl,
- 'level'=>$user->level,
- 'user_id'=>$user->id,
- 'recom_id'=>$user->recom_id,
- 'agent_id'=>$user->agent_id,
- 'crown_id'=>$user->crown_id,
- 'warea_id'=>$user->warea_id,
- ]);
- }
- }else{
- return $this->error('450001','请关注公众号并登录公众号的个人中心');
- }
- $token = Auth::guard('api')->fromUser($soap_user);
- $data['token'] =$token;
- $data['user'] =$soap_user;
- return $this->success($data);
- }
- /*
- * 获取openid
- */
- public function getUserOpenid($Code){
- $client=new Client();
- $AppId=config('wechat.official_account.default.app_id');
- $Secret=config('wechat.official_account.default.secret');
- $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$AppId.'&secret='.$Secret.'&code='.$Code.'&grant_type=authorization_code';
- $data=$client->request('get',$url);
- $da=$data->getBody()->getContents();
- $da=json_decode($da,true);
- $da=(array)$da;
- return $da;
- }
- // 微信登陆
- public function wxLogin(Request $request){
- $code=$request->input('code');
- $info = $this->getUserOpenid($code);
- Log::info($info);
- if(isset($info['openid'])){
- $soap_user = SoapUser::where('openid',$info['openid'])->first();
- if($soap_user){
- if(empty($soap_user->phone)){
- return $this->success(['openid'=>$info['openid'],'msg'=>'请绑定手机号']);
- }
- $user=User::where('mobile',$soap_user->phone)->first();
- if(empty($user)){
- return $this->error('450001','账号不存在');
- }
- if (!empty($user->deleted_at)){
- return $this->error('450001','账号已删除');
- }
- if ($user->status==1){
- return $this->error('450001','账号已禁用');
- }
- $token = Auth::guard('api')->fromUser($soap_user);
- $data['token'] =$token;
- $data['user'] =$soap_user;
- return $this->success($data);
- }else{
- return $this->success(['openid'=>$info['openid'],'msg'=>'请使用验证码登录']);
- }
- }else{
- return $this->error('450001','请关注公众号并登录公众号的个人中心');
- }
- }
- public function logout(){
- $id = Auth::user()->id;
- try{
- SoapUser::where('id',$id)->update([
- 'area_code' => null,
- 'phone' => null,
- 'nickname' => null,
- 'headimgurl' => null,
- 'level' => null,
- 'user_id' => null,
- 'recom_id' => null,
- 'agent_id' => null,
- 'crown_id' => null,
- 'warea_id' => null
- ]);
- auth('api')->logout();
- return $this->success([]);
- }catch(\Exception $e){
- return $this->error();
- }
- }
- public function getToken(Request $request){
- $phone = $request->input('phone');
- $user=SoapUser::where('phone',$phone)->first();
- if(empty($user)){
- return $this->error('450001','账号不存在');
- }
- $token = Auth::guard('api')->fromUser($user);
- $data['token'] =$token;
- $data['user'] =$user;
- return $this->success($data);
- }
- }
|