AuthController.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Http\Controllers\V1;
  3. use App\Models\Account;
  4. use App\Models\User;
  5. use Cache;
  6. use EasyWeChat\Factory;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Auth;
  10. use Illuminate\Support\Facades\DB;
  11. use Laravel\Socialite\Facades\Socialite;
  12. use PHPUnit\Util\Exception;
  13. use Validator;
  14. class AuthController extends Controller
  15. {
  16. public function login(Request $request)
  17. {
  18. try {
  19. $req = $request->post();
  20. $this->validate($request, [
  21. 'account' => 'required|digits:11',
  22. 'password' => 'required',
  23. 'code' => 'required',
  24. ]);
  25. $account = Account::where('account', $req['account'])
  26. ->where('status', 1)
  27. ->first();
  28. if(!$account){
  29. return $this->error('没有找到相关账号');
  30. }
  31. if(!\Hash::check($req['password'], $account->password)){
  32. return $this->error('账号或密码错误');
  33. }
  34. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  35. $data = $app->auth->session($req['code']);
  36. $user = User::where('open_id',$data['openid'])->first();
  37. $user->account_id = $account->id;
  38. $user->save();
  39. $token = Auth::guard('api')->fromUser($user);
  40. $user = User::with(['account'])->where('id', $user->id)->first();
  41. $data = [
  42. 'token' => "Bearer " . $token,
  43. 'user_info' => $user,
  44. ];
  45. return $this->success($data);
  46. }catch (\Exception $ex){
  47. return $this->error('账号或密码不正确,请重新输入');
  48. }
  49. }
  50. public function wechatMiniCode(Request $request): JsonResponse
  51. {
  52. try {
  53. $req = $request->post();
  54. $this->validate($request, [
  55. 'code' => 'required',
  56. ]);
  57. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  58. $data = $app->auth->session($req['code']);
  59. $user = User::where('open_id',$data['openid'])->first();
  60. if(!$user){
  61. $user = new User();
  62. $user->open_id = $data['openid'];
  63. }
  64. $user->remember_token = $data['session_key'];
  65. $user->save();
  66. return $this->success();
  67. }catch (\Exception $ex){
  68. return $this->error($ex->getMessage());
  69. }
  70. }
  71. public function wechatMiniPhone(Request $request)
  72. {
  73. try{
  74. $req = $request->post();
  75. $this->validate($request, [
  76. 'encryptedData' => 'required',
  77. 'iv' => 'required',
  78. ]);
  79. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  80. $data = $app->auth->session($req['code']);
  81. $user = User::where('open_id',$data['openid'])->first();
  82. $decryptedData = $app->encryptor->decryptData($data['session_key'], $req['iv'], $req['encryptedData']);
  83. $account = Account::where('account', $decryptedData['phoneNumber'])
  84. ->where('status', 1)
  85. ->first();
  86. if(!$account){
  87. return $this->error('没有找到相关账号');
  88. }
  89. $user = User::where('id', $user['id'])->first();
  90. $user->remember_token = $data['session_key'];
  91. if($user->mobile != $decryptedData['phoneNumber']) {
  92. $user->mobile = $decryptedData['phoneNumber'];
  93. $user->account_id = $account->id;
  94. }
  95. $user->save();
  96. $token = Auth::guard('api')->fromUser($user);
  97. $user = User::with(['account'])->where('id', $user->id)->first();
  98. $data = [
  99. 'token' => "Bearer " . $token,
  100. 'user_info' => $user,
  101. ];
  102. return $this->success($data);
  103. }catch (\Exception $ex){
  104. return $this->error($ex->getMessage());
  105. }
  106. }
  107. }