PassportController.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Models\User;
  4. use EasyWeChat\Factory;
  5. use Auth;
  6. class PassportController extends Controller
  7. {
  8. public function login()
  9. {
  10. $req = request()->post();
  11. $this->validate(request(), [
  12. 'code' => 'required',
  13. ]);
  14. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  15. $data = $app->auth->session($req['code']);
  16. $decryptedData = $app->encryptor->decryptData($data['session_key'], $req['iv'], $req['encryptedData']);
  17. $user = User::where('openid',$decryptedData['openId'])->first();
  18. if(!$user){
  19. $flag = true;
  20. $user = new User();
  21. $user->nickname = $decryptedData['nickName'];
  22. $user->openid = $decryptedData['openId'];
  23. $user->head_img = $decryptedData['avatarUrl'];
  24. $user->scene_code = md5(uniqid());
  25. $response = $app->app_code->getUnlimit($user->scene_code, [
  26. 'page' => 'pages/index/index',
  27. 'width' => 600,
  28. ]);
  29. if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
  30. $filename = $response->saveAs(public_path('assets/qrcode'), "{$user->scene_code}.png");
  31. $user->share_qrcode = env('APP_URL')."/assets/qrcode/{$user->scene_code}.png";
  32. }
  33. }
  34. $user->remember_token = $data['session_key'];
  35. if(!is_file(public_path('assets/qrcode').'/'.$user->scene_code.'.png')){
  36. $user->scene_code = md5(uniqid());
  37. $response = $app->app_code->getUnlimit($user->scene_code, [
  38. 'page' => 'pages/index/index',
  39. 'width' => 600,
  40. ]);
  41. if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
  42. $filename = $response->saveAs(public_path('assets/qrcode'), "{$user->scene_code}.png");
  43. $user->share_qrcode = env('APP_URL')."/assets/qrcode/{$user->scene_code}.png";
  44. }
  45. }
  46. $user->save();
  47. if(isset($flag)){
  48. $user = User::where('openid',$decryptedData['openId'])->first();
  49. }
  50. $token = Auth::guard('api')->fromUser($user);
  51. return out([
  52. 'token' => 'Bearer ' . $token,
  53. 'user' => $user
  54. ]);
  55. }
  56. }