AccountService.php 2.9 KB

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