MemberController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. <?php
  2. /**
  3. * MemberController.php UTF-8
  4. * 玩家接口
  5. *
  6. * @date : 2018/1/16 16:48
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace api\apple\controller\v8;
  13. use api\common\controller\AppleApiBaseController;
  14. use huo\controller\app\FloatPoint;
  15. use huo\controller\member\FindPwd;
  16. use huo\controller\member\Login;
  17. use huo\controller\member\Member;
  18. use huo\controller\member\Register;
  19. use huo\logic\member\MemberLogic;
  20. use huo\model\log\MemLoginLogModel;
  21. use huolib\sms\Sms;
  22. use huolib\sms\SmsType;
  23. use huolib\status\MemberStatus;
  24. use huolib\tool\SimpleSec;
  25. use huolib\tool\StrUtils;
  26. use think\Db;
  27. use think\Session;
  28. class MemberController extends AppleApiBaseController {
  29. public function _initialize() {
  30. parent::_initialize();
  31. }
  32. public function getReturn($mem_data, $app_id = 0) {
  33. $_rdata = (new FloatPoint())->getFloat($app_id);
  34. $_rdata['mem_id'] = $mem_data['mem_id'];
  35. $_rdata['agentgame'] = $mem_data['agent_game'];
  36. $_rdata['user_token'] = session_id();
  37. $_rdata['is_bind'] = $mem_data['is_bind'];
  38. $_rdata['cp_user_token'] = SimpleSec::encode(session_id(), config('CPAUTHCODE'));
  39. $_rdata['url'] = $mem_data['url'];
  40. return $_rdata;
  41. }
  42. public function getUrl() {
  43. return '';
  44. }
  45. /**
  46. * 一键注册
  47. * http://doc.1tsdk.com/138?page_id=2900
  48. * 【域名】/v8/user/regone
  49. */
  50. public function regOne() {
  51. $_channel_rq = $this->setChannelData();
  52. $_mem_class = new Member();
  53. $_rdata['username'] = $_mem_class->genUsername();
  54. $_rdata['password'] = StrUtils::getRandChars(8);
  55. $_rdata['agentgame'] = $_channel_rq->getAgentGame();
  56. $_rdata['type'] = 2;
  57. $this->success(lang('SUCCESS'), $_rdata);
  58. }
  59. /**
  60. * 普通注册
  61. * http://doc.1tsdk.com/138?page_id=2901
  62. * 【域名】/v8/user/reg
  63. */
  64. public function register() {
  65. $_game_rq = $this->setGameData();
  66. $_channel_rq = $this->setChannelData();
  67. $_device_rq = $this->setDeviceData();
  68. $_mem_rq = $this->setMemData(true);
  69. $_mr_class = new Register();
  70. $_rdata = $_mr_class->register($_game_rq, $_channel_rq, $_device_rq, $_mem_rq);
  71. if (MemberStatus::NO_ERROR != $_rdata['code']) {
  72. $this->error($_rdata['msg'], [], $_rdata['code']);
  73. }
  74. $this->success($_rdata['msg'], $this->getReturn($_rdata['data'], $_game_rq->getHAppId()), $_rdata['code']);
  75. }
  76. /**
  77. * 手机注册
  78. * http://doc.1tsdk.com/138?page_id=2902
  79. * 【域名】/v8/user/regm
  80. */
  81. public function regMobile() {
  82. $_game_rq = $this->setGameData();
  83. $_channel_rq = $this->setChannelData();
  84. $_device_rq = $this->setDeviceData();
  85. $_mem_rq = $this->setMemData();
  86. $_sms_data = $this->rq_data['sms'];
  87. $_mobile = $_sms_data['mobile'];
  88. $_type = $_sms_data['type'];
  89. $_code = $_sms_data['code'];
  90. /* 校验短信是否正确 */
  91. $_sms_rs = (new Sms())->check($_mobile, $_code, $_type);
  92. if (MemberStatus::NO_ERROR != $_sms_rs['code']) {
  93. $this->error($_sms_rs['msg'], [], $_sms_rs['code']);
  94. }
  95. $_mr_class = new Register();
  96. $_rdata = $_mr_class->regMobile($_game_rq, $_channel_rq, $_device_rq, $_mem_rq, $_mobile);
  97. if (MemberStatus::NO_ERROR != $_rdata['code']) {
  98. $this->error($_rdata['msg'], [], $_rdata['code']);
  99. }
  100. $this->success(lang('SUCCESS'), $this->getReturn($_rdata['data'], $_game_rq->getHAppId()));
  101. }
  102. /**
  103. * 普通登录
  104. * http://doc.1tsdk.com/138?page_id=2903
  105. * 【域名】/v8/user/login
  106. */
  107. public function login() {
  108. $_game_rq = $this->setGameData();
  109. $_channel_rq = $this->setChannelData();
  110. $_device_rq = $this->setDeviceData();
  111. $_mem_rq = $this->setMemData();
  112. $_mr_class = new Login();
  113. $_rdata = $_mr_class->login($_game_rq, $_channel_rq, $_device_rq, $_mem_rq);
  114. if (MemberStatus::NO_ERROR != $_rdata['code']) {
  115. $this->error($_rdata['msg'], [], $_rdata['code']);
  116. }
  117. $this->success($_rdata['msg'], $this->getReturn($_rdata['data'], $_game_rq->getHAppId()), $_rdata['code']);
  118. }
  119. /**
  120. * 手机短信登录
  121. * http://doc.1tsdk.com/138?page_id=2904
  122. * 【域名】/v8/user/loginm
  123. */
  124. public function loginMobile() {
  125. $_game_rq = $this->setGameData();
  126. $_channel_rq = $this->setChannelData();
  127. $_device_rq = $this->setDeviceData();
  128. $_mem_rq = $this->setMemData();
  129. $_sms_data = $this->rq_data['sms'];
  130. $_mobile = $_sms_data['mobile'];
  131. $_type = $_sms_data['type'];
  132. $_code = $_sms_data['code'];
  133. /* 校验短信是否正确 */
  134. $_sms_rs = (new Sms())->check($_mobile, $_code, $_type);
  135. if (MemberStatus::NO_ERROR != $_sms_rs['code']) {
  136. $this->error($_sms_rs['msg'], [], $_sms_rs['code']);
  137. }
  138. $_mr_class = new Login();
  139. $_rdata = $_mr_class->loginMobile($_game_rq, $_channel_rq, $_device_rq, $_mem_rq, $_mobile);
  140. if (MemberStatus::NO_ERROR != $_rdata['code']) {
  141. $this->error($_rdata['msg'], [], $_rdata['code']);
  142. }
  143. $this->success($_rdata['msg'], $this->getReturn($_rdata['data'], $_game_rq->getHAppId()), $_rdata['code']);
  144. }
  145. /**
  146. * 第三方登录
  147. * http://doc.1tsdk.com/138?page_id=2905
  148. * 【域名】/v8/user/loginoauth
  149. */
  150. public function oauthLogin() {
  151. }
  152. /**
  153. * 玩家登出
  154. * http://doc.1tsdk.com/138?page_id=2906
  155. * 【域名】/v8/user/logout
  156. */
  157. public function logout() {
  158. $_rdata['url'] = $this->getUrl();
  159. // TODO: wuyonghong 2018/5/30 异步任务处理 调用低层处理
  160. Session::clear();
  161. $this->success(lang('SUCCESS'), $_rdata);
  162. }
  163. /**
  164. * 获取用户信息
  165. * http://doc.1tsdk.com/138?page_id=3131
  166. * 【域名】/user/detail
  167. */
  168. public function read() {
  169. $this->checkLogin();
  170. $_rdata = (new Member())->getMemInfo($this->mem_id);
  171. $_code = MemberStatus::NO_ERROR;
  172. $this->success(MemberStatus::getMsg($_code), $_rdata);
  173. }
  174. /**
  175. * 获取找回密码验证token
  176. * http://doc.1tsdk.com/138?page_id=3138
  177. * 【域名】/user/passwd/sms_check
  178. */
  179. public function smsCheck() {
  180. $_sms_data = get_val($this->rq_data, 'sms', []);
  181. $_mobile = get_val($_sms_data, 'mobile', '');
  182. $_type = get_val($_sms_data, 'type', SmsType::SMS_ID_VERIFY);
  183. $_code = get_val($_sms_data, 'code', '');
  184. /* 校验短信是否正确 */
  185. $_sms_rs = (new Sms())->check($_mobile, $_code, $_type);
  186. if (MemberStatus::NO_ERROR != $_sms_rs['code']) {
  187. $this->error($_sms_rs['msg'], [], $_sms_rs['code']);
  188. }
  189. $_chk_rs = (new FindPwd())->checkMobile($_mobile);
  190. if (MemberStatus::NO_ERROR != $_chk_rs['code']) {
  191. $this->error($_chk_rs['msg'], [], $_chk_rs['code']);
  192. }
  193. $_data['verify_token'] = StrUtils::genToken();
  194. Session::set('verify_token', $_data['verify_token']);
  195. Session::set('find_pwd_mobile', $_mobile);
  196. $this->error($_chk_rs['msg'], $_data, $_chk_rs['code']);
  197. }
  198. /**
  199. * 重置密码
  200. * http://doc.1tsdk.com/138?page_id=3141
  201. * 【域名】/v8//user/passwd/reset
  202. * 【域名】/user/passwd/reset
  203. *
  204. */
  205. public function updatePassword() {
  206. $_verify_token = get_val($this->rq_data, 'verify_token', '');
  207. $_check_token = Session::get('verify_token');
  208. if ($_verify_token != $_check_token) {
  209. $_code = MemberStatus::INVALID_PARAMS;
  210. $this->error(MemberStatus::getMsg($_code), [], $_code);
  211. }
  212. $_mobile = Session::get('find_pwd_mobile');
  213. Session::delete('find_pwd_mobile');
  214. Session::delete('verify_token');
  215. $_mem_rq = $this->setMemData();
  216. $_password = $_mem_rq->getPassword();
  217. $_rs = (new FindPwd())->updatePassword($_mobile, $_password);
  218. if (MemberStatus::NO_ERROR != $_rs['code']) {
  219. $this->error($_rs['msg'], [], $_rs['code']);
  220. }
  221. $this->success($_rs['msg'], [], $_rs['code']);
  222. }
  223. /***
  224. * 获取设备登录过的账号
  225. * http://doc.1tsdk.com/138?page_id=3519
  226. * 【域名】/user/device_user
  227. */
  228. public function recoverAccount() {
  229. $_game_rq = $this->setGameData();
  230. $_device_rq = $this->setDeviceData();
  231. $_param['app_id'] = $_game_rq->getHAppId();
  232. $_param['device_id'] = $_device_rq->getDeviceId();
  233. $_mem_log_model = new MemLoginLogModel();
  234. $_i = 0;
  235. do {
  236. $_param['time'] = strtotime('-'.$_i++.'month');
  237. $_data = $_mem_log_model->getDeviceGameUser($_param);
  238. } while (empty($_data) && $_i < 3); //为空,只取3个月内记录
  239. $this->success(MemberStatus::getMsg(MemberStatus::NO_ERROR), $_data, MemberStatus::NO_ERROR);
  240. }
  241. /**
  242. * 账号绑定信息
  243. * http://doc.1tsdk.com/138?page_id=3520
  244. * 【域名】/user/bind_info
  245. */
  246. public function accountBindInfo() {
  247. $_mem_rq = $this->setMemData();
  248. $_username = $_mem_rq->getUsername();
  249. $_is_uname = (new Member())->checkUserName($_username);
  250. if (false == $_is_uname) {
  251. $this->error(
  252. MemberStatus::getMsg(MemberStatus::USERNAME_NOT_EXISTS), [], MemberStatus::USERNAME_NOT_EXISTS
  253. );
  254. }
  255. $_data = (new MemberLogic())->getMobileEmailByName($_username);
  256. if (empty($_data['mobile'])) {
  257. $this->error(MemberStatus::getMsg(MemberStatus::PHONE_NOT_BIND), [], MemberStatus::PHONE_NOT_BIND);
  258. }
  259. Session::set('bing_mobile_'.$_username, $_data['mobile']);
  260. $_data['mobile'] = substr_replace($_data['mobile'], '****', 3, 4);
  261. $this->success(MemberStatus::getMsg(MemberStatus::NO_ERROR), $_data, MemberStatus::NO_ERROR);
  262. }
  263. /**
  264. * 找回密码发送短信
  265. * http://doc.1tsdk.com/138?page_id=3521
  266. * 【域名】/password/send_sms
  267. */
  268. public function recoverPwdSendMsm() {
  269. $_mem_rq = $this->setMemData();
  270. $_username = $_mem_rq->getUsername();
  271. $_mobile = Session::get('bing_mobile_'.$_username);
  272. if (empty($_mobile)) {
  273. $this->error(MemberStatus::getMsg(MemberStatus::PHONE_EMPTY), [], MemberStatus::PHONE_EMPTY);
  274. }
  275. $_rs = (new Sms())->send($_mobile, SmsType::SMS_FIND_PWD);
  276. if (MemberStatus::NO_ERROR == $_rs['code']) {
  277. $this->success($_rs['msg'], $_rs['data'], $_rs['code']);
  278. }
  279. $this->error($_rs['msg'], $_rs['data'], $_rs['code']);
  280. }
  281. /**
  282. * 验证找回密码短信验证码
  283. * http://doc.1tsdk.com/138?page_id=3522
  284. * 【域名】/password/sms_verify
  285. */
  286. public function recoverPwdCheckVerify() {
  287. $_mem_rq = $this->setMemData();
  288. $_username = $_mem_rq->getUsername();
  289. $_sms_data = $this->rq_data['sms'];
  290. $_code = $_sms_data['code'];
  291. $_mobile = Session::get('bing_mobile_'.$_username);
  292. /* 校验短信是否正确 */
  293. $_sms_rs = (new Sms())->check($_mobile, $_code, SmsType::SMS_FIND_PWD);
  294. if (MemberStatus::NO_ERROR != $_sms_rs['code']) {
  295. $this->error($_sms_rs['msg'], [], $_sms_rs['code']);
  296. }
  297. Session::set('change_pwd_'.$_username, 1);
  298. $this->success($_sms_rs['msg'], [], $_sms_rs['code']);
  299. }
  300. /**
  301. * 重置用户密码
  302. * http://doc.1tsdk.com/138?page_id=3524
  303. * 【域名】/password/reset
  304. */
  305. public function resetPwd() {
  306. $_mem_rq = $this->setMemData();
  307. $_username = $_mem_rq->getUsername();
  308. $_password = $_mem_rq->getPassword();
  309. $_is_change = Session::get('change_pwd_'.$_username);
  310. if (empty($_is_change)) {
  311. $this->error(MemberStatus::getMsg(MemberStatus::UNKNOWN_ERROR), [], MemberStatus::UNKNOWN_ERROR);
  312. }
  313. Session::delete('change_pwd_'.$_username);
  314. Session::delete('bing_mobile_'.$_username);
  315. $_mem_id = (new MemberLogic())->getIdByName($_username);
  316. if (empty($_mem_id)) {
  317. $this->error(
  318. MemberStatus::getMsg(MemberStatus::USERNAME_NOT_EXISTS), [], MemberStatus::USERNAME_NOT_EXISTS
  319. );
  320. }
  321. $_rs = (new Member())->updatePassword($_mem_id, $_password);
  322. if (is_numeric($_rs)) {
  323. $this->success(MemberStatus::getMsg($_rs), [], $_rs);
  324. } elseif (false !== $_rs) {
  325. $this->error(MemberStatus::getMsg(MemberStatus::NO_ERROR), [], MemberStatus::NO_ERROR);
  326. } else {
  327. $this->error(MemberStatus::getMsg(MemberStatus::UNKNOWN_ERROR), [], MemberStatus::UNKNOWN_ERROR);
  328. }
  329. }
  330. }