LoginController.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace App\Http\Controllers\WeChat;
  3. use App\Models\Student;
  4. use Illuminate\Http\Request;
  5. use App\Http\Controllers\Controller;
  6. use Illuminate\Support\Facades\Log;
  7. class LoginController extends Controller
  8. {
  9. public function login(Request $request)
  10. {
  11. if(empty($request->input('code')) || empty($request->input('iv')) || empty($request->input('encryptedData'))) {
  12. return response()->json(['status' => 'error', 'info' => '参数错误']);
  13. }
  14. $code = $request->input('code');
  15. $iv = $request->input('iv');
  16. $encryptedData = $request->input('encryptedData');
  17. $app = app('wechat.mini_program');
  18. $res = $app->auth->session($code);
  19. if(!isset($res['session_key'])) {
  20. return response()->json(['status' => 'error', 'info' => '接口错误']);
  21. }
  22. $info = $app->encryptor->decryptData($res['session_key'], $iv, $encryptedData);
  23. if(!isset($info['openId'])) {
  24. return response()->json(['status' => 'error', 'info' => '接口错误']);
  25. }
  26. $student = Student::firstOrCreate([
  27. 'open_id' => $info['openId']
  28. ], [
  29. 'nickname' => $info['nickName'],
  30. 'gender' => $info['gender'],
  31. 'city' => $info['city'],
  32. 'province' => $info['province'],
  33. 'country' => $info['country'],
  34. 'avatar_url' => $info['avatarUrl'],
  35. 'name' => $info['nickName'],
  36. 'short_leave_times' => 0,
  37. 'long_leave_times' => 0,
  38. ]);
  39. return response()->json(['status' => 'success', 'info' => '操作成功', 'data' => $student]);
  40. }
  41. }