AccountService.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace App\Services\Client;
  3. use App\Enums\UserStatus;
  4. use App\Models\MemberSocialAccount;
  5. use App\Models\MemberUser;
  6. use App\Services\SmsService;
  7. use Illuminate\Support\Facades\Auth;
  8. use Illuminate\Support\Facades\Cache;
  9. class AccountService
  10. {
  11. protected $smsService;
  12. public function __construct(SmsService $smsService)
  13. {
  14. $this->smsService = $smsService;
  15. }
  16. /**
  17. * 发送验证码
  18. */
  19. public function sendVerifyCode(string $mobile)
  20. {
  21. // 生成验证码
  22. $code = mt_rand(100000, 999999);
  23. // 保存验证码到缓存
  24. Cache::put("verify_code:{$mobile}", $code, 300);
  25. // 发送验证码短信
  26. $this->smsService->sendVerifyCode($mobile, $code);
  27. return ['message' => '验证码发送成功', 'code' => $code];
  28. }
  29. /**
  30. * 用户登录
  31. */
  32. public function login(string $mobile, string $code)
  33. {
  34. // 验证验证码
  35. $cacheCode = Cache::get("verify_code:{$mobile}");
  36. if (! $cacheCode || $cacheCode != $code) {
  37. throw new \Exception('验证码错误');
  38. }
  39. // 查找或创建用户
  40. $user = MemberUser::firstOrCreate(
  41. ['mobile' => $mobile],
  42. [
  43. 'state' => UserStatus::OPEN->value,
  44. 'register_area' => request()->header('area_code'),
  45. ]
  46. );
  47. // 生成token
  48. $token = $user->createToken('auth-token')->plainTextToken;
  49. return [
  50. 'token' => $token,
  51. 'user' => $user,
  52. ];
  53. }
  54. /**
  55. * 微信登录
  56. */
  57. public function wxLogin(string $openid)
  58. {
  59. // 查找或创建微信用户
  60. $socialAccount = MemberSocialAccount::firstOrCreate(
  61. [
  62. 'platform' => 'WECHAT',
  63. 'social_id' => $openid,
  64. ]
  65. );
  66. $user = $socialAccount->user;
  67. if (! $user) {
  68. $user = MemberUser::create([
  69. 'state' => 'enable',
  70. 'register_area' => request()->header('area_code'),
  71. ]);
  72. $socialAccount->update(['user_id' => $user->id]);
  73. }
  74. // 生成token
  75. $token = $user->createToken('auth-token')->plainTextToken;
  76. return [
  77. 'token' => $token,
  78. 'user' => $user,
  79. ];
  80. }
  81. /**
  82. * 用户退出
  83. */
  84. public function logout(int $userId)
  85. {
  86. $user = MemberUser::find($userId);
  87. abort_if(! $user, 404, '用户不存在');
  88. $user->tokens()->delete();
  89. return ['message' => '退出成功'];
  90. }
  91. /**
  92. * 用户注销
  93. */
  94. public function deleteAccount()
  95. {
  96. $user = Auth::user();
  97. if (! $user || $user->state !== 'enable') {
  98. throw new \Exception('用户状态异常');
  99. }
  100. $user->state = 'disable';
  101. $user->save();
  102. $user->delete();
  103. $user->tokens()->delete();
  104. return ['message' => '账号已注销'];
  105. }
  106. }