User.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. <?php
  2. namespace app\api\controller;
  3. use app\admin\model\dynamic\Comment;
  4. use app\admin\model\dynamic\Dynamic;
  5. use app\admin\model\dynamic\Like;
  6. use app\api\service\UserService;
  7. use app\api\service\WalletService;
  8. use app\api\service\WxService;
  9. use think\Request;
  10. use app\common\controller\Api;
  11. use app\api\validate\BaseApiValidate;
  12. class User extends Api
  13. {
  14. private $service;
  15. private $walletService;
  16. protected $noNeedLogin = [
  17. "register",
  18. "findUser"
  19. ];
  20. public function __construct(Request $request = null)
  21. {
  22. parent::__construct($request);
  23. $this->service = new UserService();
  24. $this->walletService = new WalletService();
  25. }
  26. /**
  27. * 注册
  28. */
  29. public function register()
  30. {
  31. // $params = (new BaseApiValidate([
  32. // 'mobile' => 'require|length:11',
  33. // 'sms_code' => 'require',
  34. // 'parent_id' => 'number'
  35. // ]))->checkBody();
  36. // $mobile = $params['mobile'];
  37. // $check = \app\common\library\Sms::check($mobile, $params["sms_code"], "register");
  38. // if (!$check)
  39. // $this->error("短信验证码不正确!");
  40. // if(!isset($params['password'])) {
  41. // $params['password'] = '123456';
  42. // }
  43. //// $channel_id = null;
  44. //// if (isset($params["channel_key"])) {
  45. //// $channel = (new Channel())->where("key", $params["channel_key"])->find();
  46. //// if ($channel) {
  47. //// $channel_id = $channel["id"];
  48. //// }
  49. //// }
  50. // $result = $this->auth->register("U$mobile", $params['password'], null, $mobile, [
  51. //// "channel_id" => $channel_id,
  52. // "parent_id" => isset($params["parent_id"]) ? $params["parent_id"] : null
  53. // ]);
  54. // if (!$result)
  55. // $this->error("手机号码数据库中已经存在!");
  56. //// if ($channel_id > 0) {
  57. //// Channel::increase($channel_id, null, "register_count");
  58. //// }
  59. // $login = $this->auth->login($mobile, $params['password']);
  60. // if (!$login)
  61. // $this->error("账号或者密码错误!");
  62. // $u = $this->auth->getUser();
  63. // GrantVoucher::grant_voucher("register", $u->id);
  64. // $user = \app\api\model\User::fmtUser($u);
  65. // $user['token'] = $this->auth->getToken();
  66. // $this->success($user);
  67. }
  68. public function bindAppWx()
  69. {
  70. $params = (new BaseApiValidate([
  71. "openId" => "require",
  72. "unionId" => "require",
  73. "nickName" => "require",
  74. "avatarUrl" => "require"
  75. ]))->checkBody();
  76. $user = $this->auth->getUser();
  77. $r = $this->service->bindAppWx($user->id, $params);
  78. $r->code() ? $this->success($r->data()) : $this->error($r->msg());
  79. }
  80. public function bindWebWx()
  81. {
  82. $params = (new BaseApiValidate([
  83. "code" => "require"
  84. ]))->checkBody();
  85. $r = (new WxService())->wxLoginByWeb($params["code"]);
  86. if (0 === $r->code())
  87. $this->error($r->msg());
  88. $userinfo = $r->data();
  89. if (!isset($userinfo["unionid"]) || !isset($userinfo["openid"]))
  90. $this->error("微信登录错误! unionid|openid 不能为空!");
  91. $userModel = new \app\api\model\User();
  92. $existUser = $userModel->findByUnionId($userinfo["unionid"]);
  93. if ($existUser && $this->auth->getUserinfo()["id"] != $existUser["id"])
  94. $this->error("该微信已经绑定用户,请解绑后进行绑定!");
  95. $user = $this->auth->getUser();
  96. $userModel->update([
  97. "web_openid" => $userinfo["openid"],
  98. "union_id" => $userinfo["unionid"],
  99. "avatar" => $userinfo["headimgurl"],
  100. "nickname" => $userinfo["nickname"]
  101. ], ["id" => $user["id"]]);
  102. $this->success(true);
  103. }
  104. public function bindAppletWx()
  105. {
  106. $params = (new BaseApiValidate([
  107. "code" => "require"
  108. ]))->checkBody();
  109. $userModel = new \app\api\model\User();
  110. $r = (new WxService())->wxLoginByApplet($params["code"]);
  111. if (0 === $r->code())
  112. $this->error($r->msg());
  113. $userinfo = $r->data();
  114. if (!isset($userinfo["unionid"]) || !isset($userinfo["openid"]))
  115. $this->error("微信登录错误! unionid|openid 不能为空!");
  116. $user = $userModel->findById($this->auth->getUserinfo()["id"]);
  117. if (!$user)
  118. $this->error("用户不存在!");
  119. if ($user["union_id"] === $userinfo["unionid"] && $user["applet_openid"] === $userinfo["openid"]) {
  120. $this->success(true);
  121. }
  122. $existUser = $userModel->findByUnionId($userinfo["unionid"]);
  123. if ($existUser && $this->auth->getUserinfo()["id"] != $existUser["id"])
  124. $this->error("该微信已经绑定用户,请解绑后进行绑定!");
  125. $user = $this->auth->getUser();
  126. $userModel->update([
  127. "applet_openid" => $userinfo["openid"],
  128. "union_id" => $userinfo["unionid"],
  129. ], ["id" => $user["id"]]);
  130. $this->success();
  131. }
  132. public function unbindWx()
  133. {
  134. $user = $this->auth->getUser();
  135. $r = $this->service->unbindWx($user->id);
  136. $r->code() ? $this->success($r->data()) : $this->error($r->msg());
  137. }
  138. public function bindMobile()
  139. {
  140. $params = (new BaseApiValidate([
  141. "mobile" => "require",
  142. "sms_code" => "require",
  143. ]))->checkBody();
  144. $user = $this->auth->getUser();
  145. $r = $this->service->bindMobile($user->id, $params["mobile"], $params["sms_code"]);
  146. $r->code() ? $this->success($r->data()) : $this->error($r->msg());
  147. }
  148. public function resetPwd()
  149. {
  150. $params = (new BaseApiValidate([
  151. "new_pwd" => "require",
  152. "sms_code" => "require",
  153. ]))->checkBody();
  154. $user = $this->auth->getUser();
  155. $r = $this->service->resetPwd($user->id, $params["sms_code"], $params["new_pwd"]);
  156. $r->code() ? $this->success($r->data()) : $this->error($r->msg());
  157. }
  158. public function find()
  159. {
  160. $params = (new BaseApiValidate([
  161. 'user_id' => 'require|number',
  162. ]))->checkBody();
  163. $r = $this->service->findUser($params["user_id"]);
  164. $r->code() ? $this->success($r->data()) : $this->error($r->msg());
  165. }
  166. public function findWallet()
  167. {
  168. $user = $this->auth->getUser();
  169. $this->success($this->service->findWallet($user->id));
  170. }
  171. public function summary()
  172. {
  173. $user = $this->auth->getUser();
  174. $this->success($this->service->summary($user->id));
  175. }
  176. public function fetchCollectMassager()
  177. {
  178. $user = $this->auth->getUser();
  179. $params = (new BaseApiValidate([
  180. 'page' => 'require|number',
  181. 'size' => 'require|number',
  182. ]))->checkBody();
  183. $this->success($this->service->fetchCollectMassager($user->id, $params["page"], $params["size"]));
  184. }
  185. public function fetchMassagerComment()
  186. {
  187. $user = $this->auth->getUser();
  188. $params = (new BaseApiValidate([
  189. 'page' => 'require|number',
  190. 'size' => 'require|number',
  191. ]))->checkBody();
  192. $this->success($this->service->fetchMassagerComment($user->id, $params["page"], $params["size"]));
  193. }
  194. public function fetchSystemMessage()
  195. {
  196. $user = $this->auth->getUser();
  197. $params = (new BaseApiValidate([
  198. 'page' => 'require|number',
  199. 'size' => 'require|number',
  200. ]))->checkBody();
  201. $this->success($this->service->fetchSystemMessage($user->id, $params["page"], $params["size"]));
  202. }
  203. public function bindParentId()
  204. {
  205. $params = (new BaseApiValidate([
  206. 'parent_id' => 'require|number',
  207. ]))->checkBody();
  208. $user = $this->auth->getUser();
  209. $user = (new \app\api\model\User())->get($user->id);
  210. if (!$user) {
  211. $this->error("用户不存在!");
  212. }
  213. if ($user->parent_id > 0) {
  214. $this->error("已经绑定上级无法修改!");
  215. }
  216. $parent = (new \app\api\model\User())->get($params["parent_id"]);
  217. if (is_null($parent)) {
  218. $this->error("上级不存在!");
  219. }
  220. (new \app\api\model\User())->update([
  221. "parent_id" => $parent->id
  222. ], ["id" => $user->id]);
  223. $this->success(null, "绑定成功!");
  224. }
  225. public function fetchInviteQrCode()
  226. {
  227. $user = $this->auth->getUser();
  228. $url = "https://pbh5.xunsoftware.com/pages/user/login?parent_id={$user->id}";
  229. if (is_null($user->invite_qr_code)) {
  230. $qr_code = \qrcodeBase64("https://pbh5.xunsoftware.com/pages/user/login", ["parent_id" => $user->id]);
  231. (new \app\api\model\User())->update([
  232. "invite_qr_code" => $qr_code
  233. ], ["id" => $user->id]);
  234. $this->success($qr_code);
  235. }
  236. $this->success([
  237. "invite_qr_code" => $user->invite_qr_code,
  238. "link" => $url
  239. ]);
  240. }
  241. public function fetchInviteCount()
  242. {
  243. $this->success($this->service->fetchInviteCount($this->auth->getUser()["id"]));
  244. }
  245. public function fetchInviteDetails($page = 1, $size = 10)
  246. {
  247. $this->success($this->service->fetchInviteDetails($this->auth->getUser()["id"], $page, $size));
  248. }
  249. public function fetchRanking()
  250. {
  251. $this->success($this->service->fetchRanking());
  252. }
  253. public function dynamicLike($dynamic_id = null)
  254. {
  255. $user = $this->auth->getUser();
  256. $dynamic = Dynamic::where("id", $dynamic_id)->find();
  257. if (!$dynamic)
  258. $this->error("动态不存在!");
  259. $res = Like::where([
  260. "user_id" => $user["id"],
  261. "dynamic_id" => $dynamic_id
  262. ])->find();
  263. if ($res) {
  264. $this->success(true);
  265. }
  266. Like::create([
  267. "user_id" => $user["id"],
  268. "dynamic_id" => $dynamic_id,
  269. "massager_id" => $dynamic["massager_id"],
  270. "createtime" => time(),
  271. "updatetime" => time()
  272. ]);
  273. $this->success(true);
  274. }
  275. public function dynamicUnlike($dynamic_id = null)
  276. {
  277. $user = $this->auth->getUser();
  278. Like::where([
  279. "user_id" => $user["id"],
  280. "dynamic_id" => $dynamic_id
  281. ])->delete();
  282. $this->success(true);
  283. }
  284. public function dynamicComment($dynamic_id = null, $text = null)
  285. {
  286. $user = $this->auth->getUser();
  287. $dynamic = Dynamic::where("id", $dynamic_id)->find();
  288. if (!$dynamic)
  289. $this->error("动态不存在!");
  290. if (is_null($text))
  291. $this->error("评论内容不能为空!");
  292. $text = preg_replace('/(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?/','***********',$text); // extract phonenumber
  293. $switch = config("site.dynamic_publish_check_switch");
  294. Comment::create([
  295. "user_id" => $user["id"],
  296. "dynamic_id" => $dynamic["id"],
  297. "text" => $text,
  298. "status" => 1 == $switch ? \E_BASE_STATUS::Checking : \E_BASE_STATUS::Normal,
  299. "createtime" => time(),
  300. "updatetime" => time()
  301. ]);
  302. $this->success();
  303. }
  304. }