UserService.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace app\common\service;
  3. use app\common\model\Accounts;
  4. use app\common\model\User;
  5. use EasyWeChat\Factory;
  6. use app\common\traits\ServiceTrait;
  7. class UserService
  8. {
  9. use ServiceTrait;
  10. /** @var User */
  11. public static $Model = User::class;
  12. const GENDER_MAP = ['未知', '男', '女'];
  13. const ROLE_DEV = 'dev'; //开发者
  14. /**
  15. * @throws
  16. */
  17. public static function wxLogin($code)
  18. {
  19. // 微信配置
  20. $wechatConfig = config('common.wechat');
  21. $app = Factory::miniProgram($wechatConfig);
  22. $result = $app->auth->session($code);
  23. if (isset($result['errcode'])) {
  24. throw new \Exception('微信登录失败:' . $result['errmsg']);
  25. }
  26. $openid = $result['openid'];
  27. $user = self::$Model::where('openid', $openid)->field('id,username,nickname,avatar,role')->find();
  28. if (!$user) {
  29. // 新用户自动注册
  30. $user = new User;
  31. $user->openid = $openid;
  32. $user->nickname = '微信用户' . mt_rand(10000, 99999);
  33. $user->account = new Accounts();
  34. $res = $user->together('account')->save();
  35. }
  36. $account = Accounts::where('user_id', $user->id ?? 0)->find();
  37. if (!$account) {
  38. $acRes = $user->account()->save([]);
  39. }
  40. return $user;
  41. }
  42. }