Member.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  1. <?php
  2. /**
  3. * Member.php
  4. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  5. * =========================================================
  6. * Copy right 2015-2025 山西牛酷信息科技有限公司, 保留所有权利。
  7. * ----------------------------------------------
  8. * 官方网址: http://www.niushop.com.cn
  9. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  10. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  11. * =========================================================
  12. * @author : niuteam
  13. * @date : 2015.1.17
  14. * @version : v1.0.0.0
  15. */
  16. namespace app\api\controller;
  17. use app\model\member\BalanceRecharge;
  18. use app\model\member\Member as MemberModel;
  19. use app\model\member\Register as RegisterModel;
  20. use app\model\message\Message;
  21. use app\model\system\Pay as PayModel;
  22. use think\facade\Cache;
  23. use app\model\member\MemberVip;
  24. use app\model\member\FranchiseeExamine;
  25. class Member extends BaseApi
  26. {
  27. /**
  28. * 基础信息
  29. */
  30. public function info()
  31. {
  32. $token = $this->checkToken();
  33. if ($token['code'] < 0) return $this->response($token);
  34. $member_model = new MemberModel();
  35. $info = $member_model->getMemberInfo([ [ 'member_id', '=', $token['data']['member_id'] ] ], 'member_id,source_member,username,nickname,mobile,email,password,status,headimg,member_level,member_level_name,member_label,member_label_name,qq,qq_openid,wx_openid,wx_unionid,ali_openid,baidu_openid,toutiao_openid,douyin_openid,realname,sex,location,birthday,point,balance,balance_money,growth,member_type,sign_days_series,password,vip_enddate');
  36. if (!empty($info['data'])) {
  37. $info['data']['password'] = empty($info['data']['password']) ? 0 : 1;
  38. }
  39. return $this->response($info);
  40. }
  41. /**
  42. * 修改会员头像
  43. * @return string
  44. */
  45. public function modifyheadimg()
  46. {
  47. $token = $this->checkToken();
  48. if ($token['code'] < 0) return $this->response($token);
  49. $headimg = isset($this->params['headimg']) ? $this->params['headimg'] : '';
  50. $member_model = new MemberModel();
  51. $res = $member_model->editMember([ 'headimg' => $headimg ], [ [ 'member_id', '=', $token['data']['member_id'] ] ]);
  52. return $this->response($res);
  53. }
  54. /**
  55. * 修改昵称
  56. * @return string
  57. */
  58. public function modifynickname()
  59. {
  60. $token = $this->checkToken();
  61. if ($token['code'] < 0) return $this->response($token);
  62. $nickname = isset($this->params['nickname']) ? $this->params['nickname'] : '';
  63. $headimg = isset($this->params['headimg']) ? $this->params['headimg'] : '';
  64. $data=[
  65. 'nickname' => $nickname,
  66. 'headimg' => $headimg
  67. ];
  68. $member_model = new MemberModel();
  69. $res = $member_model->editMember($data, [ [ 'member_id', '=', $token['data']['member_id'] ] ]);
  70. return $this->response($res);
  71. }
  72. /**
  73. * 修改手机号
  74. * @return string
  75. */
  76. public function modifymobile()
  77. {
  78. $token = $this->checkToken();
  79. if ($token['code'] < 0) return $this->response($token);
  80. // 校验验证码
  81. $captcha = new Captcha();
  82. $check_res = $captcha->checkCaptcha(false);
  83. if ($check_res['code'] < 0) return $this->response($check_res);
  84. $register = new RegisterModel();
  85. $exist = $register->mobileExist($this->params['mobile']);
  86. if ($exist) {
  87. return $this->response($this->error("", "手机号已存在"));
  88. } else {
  89. $key = $this->params['key'];
  90. $verify_data = Cache::get($key);
  91. if ($verify_data["mobile"] == $this->params["mobile"] && $verify_data["code"] == $this->params["code"]) {
  92. $mobile = isset($this->params['mobile']) ? $this->params['mobile'] : '';
  93. $member_model = new MemberModel();
  94. $res = $member_model->editMember([ 'mobile' => $mobile ], [ [ 'member_id', '=', $token['data']['member_id'] ] ]);
  95. } else {
  96. $res = $this->error("", "验证码不正确");
  97. }
  98. return $this->response($res);
  99. }
  100. }
  101. /**
  102. * 修改邮箱
  103. * @return string
  104. */
  105. public function modifyemail()
  106. {
  107. $token = $this->checkToken();
  108. if ($token['code'] < 0) return $this->response($token);
  109. // 校验验证码
  110. $captcha = new Captcha();
  111. $check_res = $captcha->checkCaptcha(false);
  112. if ($check_res['code'] < 0) return $this->response($check_res);
  113. $register = new RegisterModel();
  114. $exist = $register->emailExist($this->params['email']);
  115. if ($exist) {
  116. return $this->response($this->error("", "邮箱已存在"));
  117. } else {
  118. $key = $this->params['key'];
  119. $verify_data = Cache::get($key);
  120. if ($verify_data["email"] == $this->params["email"] && $verify_data["code"] == $this->params["code"]) {
  121. $email = isset($this->params['email']) ? $this->params['email'] : '';
  122. $member_model = new MemberModel();
  123. $res = $member_model->editMember([ 'email' => $email ], [ [ 'member_id', '=', $token['data']['member_id'] ] ]);
  124. } else {
  125. $res = $this->error("", "验证码不正确");
  126. }
  127. return $this->response($res);
  128. }
  129. }
  130. /**
  131. * 修改密码
  132. * @return string
  133. */
  134. public function modifypassword()
  135. {
  136. $token = $this->checkToken();
  137. if ($token['code'] < 0) return $this->response($token);
  138. $new_password = isset($this->params['new_password']) ? $this->params['new_password'] : '';
  139. $member_model = new MemberModel();
  140. // $info = $member_model->getMemberInfo([ [ 'member_id', '=', $token['data']['member_id'] ] ], 'password');
  141. // // 未设置密码时设置密码需验证身份
  142. // if (empty($info['data']['password'])) {
  143. // $key = $this->params['key'] ?? '';
  144. // $code = $this->params['code'] ?? '';
  145. // $verify_data = Cache::get($key);
  146. // if (empty($verify_data) || $verify_data["code"] != $code) {
  147. // return $this->response($this->error("", "手机验证码不正确"));
  148. // }
  149. // }
  150. $res = $member_model->modifyMemberPassword($token['data']['member_id'], $new_password);
  151. return $this->response($res);
  152. }
  153. /**
  154. * 绑定短信验证码
  155. */
  156. public function bindmobliecode()
  157. {
  158. // 校验验证码
  159. $captcha = new Captcha();
  160. $check_res = $captcha->checkCaptcha(false);
  161. if ($check_res['code'] < 0) return $this->response($check_res);
  162. $mobile = $this->params['mobile'];//注册手机号
  163. $register = new RegisterModel();
  164. $exist = $register->mobileExist($mobile);
  165. if ($exist) {
  166. return $this->response($this->error("", "当前手机号已存在"));
  167. } else {
  168. $code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);// 生成4位随机数,左侧补0
  169. $message_model = new Message();
  170. $res = $message_model->sendMessage([ "mobile" => $mobile, "code" => $code, "support_type" => [ "sms" ], "keywords" => "MEMBER_BIND" ]);
  171. if ($res["code"] >= 0) {
  172. //将验证码存入缓存
  173. $key = 'bind_mobile_code_' . md5(uniqid(null, true));
  174. Cache::tag("bind_mobile_code")->set($key, [ 'mobile' => $mobile, 'code' => $code ], 600);
  175. return $this->response($this->success([ "key" => $key ]));
  176. } else {
  177. return $this->response($res);
  178. }
  179. }
  180. }
  181. /**
  182. * 邮箱绑定验证码
  183. */
  184. public function bingemailcode()
  185. {
  186. // 校验验证码
  187. $captcha = new Captcha();
  188. $check_res = $captcha->checkCaptcha(false);
  189. if ($check_res['code'] < 0) return $this->response($check_res);
  190. $email = $this->params['email'];//注册邮箱号
  191. $register = new RegisterModel();
  192. $exist = $register->emailExist($email);
  193. if ($exist) {
  194. return $this->response($this->error("", "当前邮箱已存在"));
  195. } else {
  196. $code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);// 生成4位随机数,左侧补0
  197. $message_model = new Message();
  198. $res = $message_model->sendMessage([ "email" => $email, "code" => $code, "support_type" => [ "email" ], "keywords" => "MEMBER_BIND" ]);
  199. if ($res["code"] >= 0) {
  200. //将验证码存入缓存
  201. $key = 'bind_email_code_' . md5(uniqid(null, true));
  202. Cache::tag("bind_email_code")->set($key, [ 'email' => $email, 'code' => $code ], 600);
  203. return $this->response($this->success([ "key" => $key ]));
  204. } else {
  205. return $this->response($res);
  206. }
  207. }
  208. }
  209. /**
  210. * 设置密码时获取验证码
  211. */
  212. public function pwdmobliecode()
  213. {
  214. $token = $this->checkToken();
  215. if ($token['code'] < 0) return $this->response($token);
  216. // 校验验证码
  217. $captcha = new Captcha();
  218. $check_res = $captcha->checkCaptcha(false);
  219. if ($check_res['code'] < 0) return $this->response($check_res);
  220. $member_model = new MemberModel();
  221. $info = $member_model->getMemberInfo([ [ 'member_id', '=', $token['data']['member_id'] ] ], 'mobile');
  222. if (empty($info['data'])) return $this->response($this->error([], '未获取到会员信息!'));
  223. if (empty($info['data']['mobile'])) return $this->response($this->error([], '会员信息尚未绑定手机号!'));
  224. $mobile = $info['data']['mobile'];
  225. $code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);// 生成4位随机数,左侧补0
  226. $message_model = new Message();
  227. $res = $message_model->sendMessage([ "mobile" => $mobile, "code" => $code, "support_type" => [ "sms" ], "keywords" => "SET_PASSWORD" ]);
  228. if (isset($res["code"]) && $res["code"] >= 0) {
  229. //将验证码存入缓存
  230. $key = 'password_mobile_code_' . md5(uniqid(null, true));
  231. Cache::tag("password_mobile_code_")->set($key, [ 'mobile' => $mobile, 'code' => $code ], 600);
  232. return $this->response($this->success([ "key" => $key, 'code' => $code ]));
  233. } else {
  234. return $this->response($this->error('', '发送失败'));
  235. }
  236. }
  237. /**
  238. * 验证邮箱
  239. * @return string
  240. */
  241. public function checkemail()
  242. {
  243. $email = isset($this->params['email']) ? $this->params['email'] : '';
  244. if (empty($email)) {
  245. return $this->response($this->error('', 'REQUEST_EMAIL'));
  246. }
  247. $member_model = new MemberModel();
  248. $condition = [
  249. [ 'email', '=', $email ]
  250. ];
  251. $res = $member_model->getMemberCount($condition);
  252. if ($res['data'] > 0) {
  253. return $this->response($this->error('', '当前邮箱已存在'));
  254. }
  255. return $this->response($this->success());
  256. }
  257. /**
  258. * 验证手机号
  259. * @return string
  260. */
  261. public function checkmobile()
  262. {
  263. $mobile = isset($this->params['mobile']) ? $this->params['mobile'] : '';
  264. if (empty($mobile)) {
  265. return $this->response($this->error('', 'REQUEST_MOBILE'));
  266. }
  267. $member_model = new MemberModel();
  268. $condition = [
  269. [ 'mobile', '=', $mobile ]
  270. ];
  271. $res = $member_model->getMemberCount($condition);
  272. if ($res['data'] > 0) {
  273. return $this->response($this->error('', '当前手机号已存在'));
  274. }
  275. return $this->response($this->success());
  276. }
  277. /**
  278. * 修改支付密码
  279. * @return string
  280. */
  281. public function modifypaypassword()
  282. {
  283. $token = $this->checkToken();
  284. if ($token['code'] < 0) return $this->response($token);
  285. $key = $this->params['key'] ?? '';
  286. $code = $this->params['code'] ?? '';
  287. $password = isset($this->params['password']) ? trim($this->params['password']) : '';
  288. if (empty($password)) return $this->response($this->error('', '支付密码不可为空'));
  289. $verify_data = Cache::get($key);
  290. if ($verify_data["code"] == $this->params["code"]) {
  291. $member_model = new MemberModel();
  292. $res = $member_model->modifyMemberPayPassword($token['data']['member_id'], $password);
  293. } else {
  294. $res = $this->error("", "验证码不正确");
  295. }
  296. return $this->response($res);
  297. }
  298. /**
  299. * 检测会员是否设置支付密码
  300. */
  301. public function issetpayaassword()
  302. {
  303. $token = $this->checkToken();
  304. if ($token['code'] < 0) return $this->response($token);
  305. $member_model = new MemberModel();
  306. $res = $member_model->memberIsSetPayPassword($this->member_id);
  307. return $this->response($res);
  308. }
  309. /**
  310. * 检测支付密码是否正确
  311. */
  312. public function checkpaypassword()
  313. {
  314. $token = $this->checkToken();
  315. if ($token['code'] < 0) return $this->response($token);
  316. $password = isset($this->params['pay_password']) ? trim($this->params['pay_password']) : '';
  317. if (empty($password)) return $this->response($this->error('', '支付密码不可为空'));
  318. $member_model = new MemberModel();
  319. $res = $member_model->checkPayPassword($this->member_id, $password);
  320. return $this->response($res);
  321. }
  322. /**
  323. * 修改支付密码发送手机验证码
  324. */
  325. public function paypwdcode()
  326. {
  327. $token = $this->checkToken();
  328. if ($token['code'] < 0) return $this->response($token);
  329. $code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);// 生成4位随机数,左侧补0
  330. $message_model = new Message();
  331. $res = $message_model->sendMessage([ "member_id" => $this->member_id, "code" => $code, "support_type" => [ "sms" ], "keywords" => "MEMBER_PAY_PASSWORD" ]);
  332. if ($res["code"] >= 0) {
  333. //将验证码存入缓存
  334. $key = 'pay_password_code_' . md5(uniqid(null, true));
  335. Cache::tag("pay_password_code")->set($key, [ 'member_id' => $this->member_id, 'code' => $code ], 600);
  336. return $this->response($this->success([ "key" => $key ]));
  337. } else {
  338. return $this->response($res);
  339. }
  340. }
  341. /**
  342. * 验证修改支付密码动态码
  343. */
  344. public function verifypaypwdcode()
  345. {
  346. $key = isset($this->params['key']) ? trim($this->params['key']) : '';
  347. $verify_data = Cache::get($key);
  348. if ($verify_data["code"] == $this->params["code"]) {
  349. $res = $this->success([]);
  350. } else {
  351. $res = $this->error("", "验证码不正确");
  352. }
  353. return $this->response($res);
  354. }
  355. /**
  356. * 通过token得到会员id
  357. */
  358. public function id()
  359. {
  360. $token = $this->checkToken();
  361. if ($token['code'] < 0) return $this->response($token);
  362. return $this->response($this->success($this->member_id));
  363. }
  364. /**
  365. * 账户奖励规则说明
  366. * @return false|string
  367. */
  368. public function accountrule()
  369. {
  370. //积分
  371. $point = event('MemberAccountRule', [ 'account' => 'point' ]);
  372. //余额
  373. $balance = event('MemberAccountRule', [ 'account' => 'balance' ]);
  374. //成长值
  375. $growth = event('MemberAccountRule', [ 'account' => 'growth' ]);
  376. $res = [
  377. 'point' => $point,
  378. 'balance' => $balance,
  379. 'growth' => $growth
  380. ];
  381. return $this->response($this->success($res));
  382. }
  383. /**
  384. * 拉取会员头像
  385. */
  386. public function pullhaedimg(){
  387. $member_id = input('member_id', '');
  388. $member = new MemberModel();
  389. $member->pullHeadimg($member_id);
  390. }
  391. /**
  392. * @return false|string
  393. * 会员折扣
  394. */
  395. public function member_discount(){
  396. $token = $this->checkToken();
  397. if ($token['code'] < 0) return $this->response($token);
  398. $member = new MemberModel();
  399. $vip_level = $member->getMemberInfo([['member_id','=',$token['data']['member_id']]],'member_level,member_type');
  400. if($vip_level['data']['member_type']==1) {
  401. $vip_discount = new MemberVip();
  402. $member_discount = $vip_discount->getMemberVipInfo([['id', '=', $vip_level['data']['member_level']]], 'discount');
  403. }
  404. if($vip_level['data']['member_type']==2){
  405. $franchisee_discount = new FranchiseeExamine();
  406. $member_discount = $franchisee_discount->getFranchiseeExamineInfo([['member_id', '=', $token['data']['member_id']]], 'discount');
  407. }
  408. return $this->response($this->success($member_discount));
  409. }
  410. /**
  411. * 用户充值
  412. */
  413. public function balance_recharge(){
  414. $token = $this->checkToken();
  415. if ($token['code'] < 0) return $this->response($token);
  416. $member = new MemberModel();
  417. $pay = new PayModel();
  418. $out_trade_no = $pay->createOutTradeNo();
  419. $member_username = $member->getMemberInfo([['member_id','=',$token['data']['member_id']]],'username');
  420. $array = input();
  421. $data = [
  422. 'recharge_no'=>date('Ymd').time().$token['data']['member_id'],
  423. 'member_id'=>$token['data']['member_id'],
  424. 'member_username'=>$member_username['data']['username'],
  425. 'money'=>$array['money'],
  426. 'type'=>$array['type'],
  427. 'account_number'=>$array['account_number'],
  428. 'create_time'=>time(),
  429. 'out_trade_no'=>$out_trade_no,
  430. 'status'=>1
  431. ];
  432. $balance_model = new BalanceRecharge();
  433. $balance_model->add($data);
  434. $pay->addPay(0, $out_trade_no, $data['type'], '余额充值', '余额充值', $data['money'], '', 'BalancePayNotify', '');
  435. return $this->response($this->success($out_trade_no));
  436. }
  437. }