User.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace app\controller\v2;
  3. use app\extra\basic\Base;
  4. use app\extra\tools\CodeExtend;
  5. use app\extra\weMini\Crypt;
  6. use app\extra\weMini\UserInfo;
  7. use app\middleware\WxMiddleware;
  8. use app\model\blue\BlueUserOpen;
  9. use DI\Attribute\Inject;
  10. use LinFly\Annotation\Route\Controller;
  11. use LinFly\Annotation\Route\Middleware;
  12. use LinFly\Annotation\Route\Route;
  13. use Shopwwi\WebmanAuth\Facade\Auth as AuthMode;
  14. use support\Request;
  15. use support\Response;
  16. #[Controller(prefix: "/wx_v2/user"),Middleware(WxMiddleware::class)]
  17. class User extends Base
  18. {
  19. protected array $noNeedLogin = ["loginMobile","loginQuick"];
  20. #[Inject]
  21. protected BlueUserOpen $model;
  22. #[Route(path: "quick",methods: "post")]
  23. public function loginQuick(Request $request): Response
  24. {
  25. try {
  26. $param = $this->_valid([
  27. "code.require" => trans("empty.require"),
  28. "pid.default" => 0
  29. ],$request->method());
  30. if (!is_array($param)) return error($param);
  31. $userinfo = (new Crypt([
  32. "appid" => sConf("wechat.mini_appid"),
  33. "appsecret" => sConf("wechat.mini_secret")
  34. ]))->session($param['code']);
  35. if (!isset($userinfo['openid'])) return error("获取数据失败");
  36. $map = ['openid' => $userinfo['openid']];
  37. $userOpen = $this->model->where($map)->findOrEmpty();
  38. if ($userOpen->isEmpty()) return error("new");
  39. $userAuth = get_object_vars(AuthMode::guard("member")->login($userOpen->toArray()));
  40. return success("ok",['token' => $userAuth]);
  41. } catch (\Throwable $throwable) {
  42. return error($throwable->getMessage());
  43. }
  44. }
  45. #[Route(path: "login",methods: "post")]
  46. public function loginMobile(Request $request): Response
  47. {
  48. try {
  49. $param = $this->_valid([
  50. "code.require" => trans("empty.require"),
  51. "login.require" => trans("empty.require"),
  52. "pid.default" => 0
  53. ],$request->method());
  54. if (!is_array($param)) return error($param);
  55. $userinfo = (new Crypt([
  56. "appid" => sConf("wechat.mini_appid"),
  57. "appsecret" => sConf("wechat.mini_secret")
  58. ]))->session($param['login']);
  59. if (!isset($userinfo['openid'])) return error("获取数据失败");
  60. $mobile = (new UserInfo([
  61. "appid" => sConf("wechat.mini_appid"),
  62. "appsecret" => sConf("wechat.mini_secret")
  63. ]))->getPhoneNumber($param['code']);
  64. if ($mobile['errcode'] <> 0) return error($mobile['errmsg']);
  65. $map = ['openid' => $userinfo['openid'],'mobile' => $mobile['phone_info']['purePhoneNumber']];
  66. $userOpen = $this->model->where($map)->findOrEmpty();
  67. if ($userOpen->isEmpty()) {
  68. $userOpen->insertGetId([
  69. 'openid' => $userinfo['openid'],
  70. 'parent' => $param['pid'],
  71. 'uuid' => CodeExtend::uniqidNumber(),
  72. 'mobile' => $mobile['phone_info']['purePhoneNumber'],
  73. "create_ip" => $request->getRealIp(),
  74. "nickname" => "微信用户",
  75. "headimg" => "https://blue-data.oss-cn-guangzhou.aliyuncs.com/logo.png"
  76. ]);
  77. $userOpen = $this->model->where($map)->findOrEmpty();
  78. }
  79. $userAuth = get_object_vars(AuthMode::guard("member")->login($userOpen->toArray()));
  80. return success("ok",['token' => $userAuth]);
  81. } catch (\Throwable $throwable) {
  82. return error($throwable->getMessage());
  83. }
  84. }
  85. }