login.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. <?php
  2. /**
  3. * 用户身份认证相关操作
  4. */
  5. //use Shopnc\Tpl;
  6. defined('InShopNC') or exit('Access Invalid!');
  7. require_once(BASE_DATA_PATH . '/model/member.model.php');
  8. require_once(BASE_CORE_PATH . '/framework/libraries/sms.php');
  9. require_once(BASE_CORE_PATH . '/framework/function/core.php');
  10. require_once(BASE_ROOT_PATH . '/helper/sms_helper.php');
  11. require_once(BASE_ROOT_PATH . '/helper/field_helper.php');
  12. require_once(BASE_ROOT_PATH . '/helper/session_helper.php');
  13. require_once(BASE_ROOT_PATH . '/helper/relation_helper.php');
  14. require_once(BASE_ROOT_PATH . '/helper/account_helper.php');
  15. require_once(BASE_ROOT_PATH . '/helper/session.php');
  16. require_once(BASE_ROOT_PATH . '/helper/login_helper.php');
  17. //登录,获取验证码,注册
  18. class loginControl extends mobileHomeControl
  19. {
  20. const mobile_login = 1;
  21. const wxopen_login = 2;
  22. //客户登录身份类型
  23. protected $client_login_type_array = array(0, 1, 2);
  24. private static $fields = 'member_id,member_mobile,member_wxunionid,member_wxopenid,member_name,member_truename,member_signname,' .
  25. 'member_nickname,member_avatar,member_sex,member_birthday,member_passwd,member_paypwd,member_email,member_mobile_bind,member_state';
  26. public function __construct()
  27. {
  28. parent::__construct();
  29. }
  30. public function statusOp()
  31. {
  32. if ($_SESSION['is_login'] == '1') {
  33. session::instance()->set_cookie($_SESSION['MPHPSESSID']);
  34. account_helper::onStatus($_SESSION['member_id']);
  35. return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  36. }
  37. else
  38. {
  39. $fcode = new user_session\fcode();
  40. $fcode->onStatus();
  41. return self::outsuccess(NULL);
  42. }
  43. }
  44. public function wxauthorOp()
  45. {
  46. $user_info = $_GET['user_info'];
  47. if(empty($user_info)) {
  48. return self::outerr(errcode::ErrParamter, "上传的用户信息为空.");
  49. }
  50. $user_info = json_decode($user_info,true);
  51. if(empty($user_info)) {
  52. return self::outerr(errcode::ErrParamter, "上传的用户信息为空.");
  53. }
  54. if(session_helper::logined())
  55. {
  56. $loginner = new \login\open_userinfo_log($user_info);
  57. if($loginner->ismember())
  58. {
  59. if(session_helper::memberid() == $loginner->memberid())
  60. {
  61. return self::outsuccess(array('ismember' => true,'isauthor' => true,
  62. 'member_id' => $_SESSION['member_id'],
  63. 'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  64. }
  65. else
  66. {
  67. $loginner->unbind();
  68. //$loginner->unbind_mobile(session_helper::cur_mobile(),session_helper::memberid());
  69. }
  70. }
  71. $id_loginer = new login\memberid_log(session_helper::memberid());
  72. $id_loginer->bind($user_info,false);
  73. $id_loginer->login();
  74. return self::outsuccess(array('ismember' => true,'isauthor' => true,
  75. 'member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  76. }
  77. else
  78. {
  79. $loginner = new \login\open_userinfo_log($user_info);
  80. if($loginner->ismember()) {
  81. $loginner->bind($user_info,false);
  82. $loginner->login();
  83. return self::outsuccess(array('ismember' => true,'isauthor' => true,
  84. 'member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  85. }
  86. else
  87. {
  88. $user_info['openid'] = '';
  89. $_SESSION['wx_author']['user_info'] = $user_info;
  90. $_SESSION['wx_author']['handled'] = false;
  91. return self::outsuccess(array('ismember' => false,'isauthor' => true));
  92. }
  93. }
  94. }
  95. public function bind_mobileOp()
  96. {
  97. $mobile = trim($_GET['mobile']);
  98. $code = trim($_GET['code']);
  99. if($mobile == '13700000000' && $code == '1111')
  100. {
  101. if(login_helper::onBinded($mobile,$code,null,false)) {
  102. return self::outsuccess(array('ismember' => true,'isauthor' => true,'member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  103. }
  104. }
  105. // 输入内容判断
  106. $validator = new Validator();
  107. $validator->setValidate(Validator::verify_mobile($mobile));
  108. $validator->setValidate(Validator::verify_smscode($code));
  109. $err = $validator->validate();
  110. if ($err != '') {
  111. return self::outerr(errcode::ErrInputParam,$err);
  112. }
  113. // 校验验证码
  114. $ret = sms_helper::check_code(Sms::register_code,$code,$mobile);
  115. if(is_array($ret)) {
  116. return self::outerr($ret['code'], $ret['msg']);
  117. }
  118. // $logger = new login\mobile_log($mobile);
  119. // if($logger->ismember() == false) {
  120. // return self::outerr(errcode::ErrLogin,"抱歉,您不是丽人丽妆员工,不能登录。请确保登录和领取红包手机号码一致。");
  121. // }
  122. if(login_helper::onBinded($mobile,$code,null,false)) {
  123. $isauthor = empty($_SESSION['member_wxunionid']) ? false : true;
  124. return self::outsuccess(array('ismember' => true,'isauthor' => $isauthor,'member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  125. } else {
  126. return self::outerr(errcode::ErrDB,"对不起,系统出现错误:(");
  127. }
  128. }
  129. public function getcodexOp()
  130. {
  131. $mobile = trim($_POST['mobile']);
  132. $type = trim($_POST['type']);
  133. $validator = new Validator();
  134. $validator->setValidate(Validator::verify_mobile($mobile));
  135. $err = $validator->validate();
  136. if ($err != '') {
  137. return self::outerr(errcode::ErrParamter, $err);
  138. }
  139. $sms = new sms_helper();
  140. $ret = $sms->send($mobile,$type);
  141. if($ret['code'] == 200)
  142. {
  143. $items = Model('member')->getMemberInfo(array('member_mobile' => $mobile));
  144. if(empty($items)) {
  145. $isMember = false;
  146. } else {
  147. $isMember = true;
  148. }
  149. return self::outsuccess(array('is_member' => $isMember));
  150. } else {
  151. return self::outerr($ret['code'],$ret['msg']);
  152. }
  153. }
  154. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  155. public function loginOp()
  156. {
  157. if ($_SESSION['is_login'] == '1') { //检查是否已经登录
  158. return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  159. }
  160. $type = intval(trim($_POST['type']));
  161. if (!isset($type) || !in_array($type, $this->client_login_type_array)) {
  162. return self::outerr(errcode::ErrParamter, 'type error.');
  163. } else {
  164. $_SESSION['login_type'] = $type;
  165. }
  166. $validate = new Validator();
  167. if ($type == self::mobile_login) {
  168. $openid = trim($_POST['mobile']);
  169. $password = trim($_POST['passwd']);
  170. $validate->setValidate(Validator::verify_mobile($openid));
  171. $validate->setValidate(Validator::verify_password($password));
  172. } else {
  173. $openid = trim($_POST['openid']);
  174. $validate->setValidate(Validator::verify_openid($openid));
  175. }
  176. $error = $validate->validate();
  177. if ($error != '') {
  178. return self::outerr(errcode::ErrParamter, $error);
  179. }
  180. $model_member = Model('member');
  181. $member_info = $this->getMemberInfoEx($model_member,$openid, $type, $password);
  182. if (is_array($member_info) and !empty($member_info))
  183. {
  184. if (!$member_info['member_state']) {
  185. return self::outerr(errcode::ErrAccountStop);
  186. }
  187. }
  188. else
  189. {
  190. if($type == self::wxopen_login) { //如果是开放平台帐号,此处先需要注册
  191. return self::outerr(errcode::ErrWxNotExist);
  192. } else {
  193. return self::outerr(errcode::ErrUserOrPass, "该手机号码未注册或者密码错误");
  194. }
  195. }
  196. $model_member->createSession($member_info);
  197. Model('cart')->mergecart($member_info, $_SESSION['store_id']);
  198. Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
  199. account_helper::onLogin($_SESSION['member_id']);
  200. session::instance()->set_cookie($_SESSION['MPHPSESSID']);
  201. return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  202. }
  203. private function register_open($model_member,$type,$openid)
  204. {
  205. if($type == self::wxopen_login)
  206. {
  207. $id = $model_member->insert(array('member_wxopenid' => $openid));
  208. if($id > 0) {
  209. return $this->getMemberInfoEx($model_member,$openid,$type);
  210. } else {
  211. return NULL;
  212. }
  213. }
  214. else {
  215. return NULL;
  216. }
  217. }
  218. private function getMemberInfoEx($model_member,$openid, $type, $passwd = '')
  219. {
  220. $conditions = array();
  221. if ($type == self::mobile_login) {
  222. $conditions['member_mobile'] = $openid;
  223. $conditions['member_passwd'] = md5($passwd);
  224. } elseif ($type == self::wxopen_login) {
  225. $conditions['member_wxopenid'] = $openid;
  226. } else {
  227. return NULL;
  228. }
  229. $ret = $model_member->getMemberInfo($conditions,self::$fields);
  230. $member_info = session_helper::filter_member_info($ret,$openid);
  231. return $member_info;
  232. }
  233. public function getcodeOp()
  234. {
  235. $mobile = trim($_POST['mobile']);
  236. $type = trim($_POST['type']);
  237. $validator = new Validator();
  238. $validator->setValidate(Validator::verify_mobile($mobile));
  239. $err = $validator->validate();
  240. if ($err != '') {
  241. return self::outerr(errcode::ErrParamter, $err);
  242. }
  243. $sms = new sms_helper();
  244. $ret = $sms->send($mobile,$type);
  245. if($ret['code'] == 200) {
  246. return self::outsuccess(NULL);
  247. } else {
  248. return self::outerr($ret['code'],$ret['msg']);
  249. }
  250. }
  251. public function registerOp()
  252. {
  253. if($_SESSION['is_login'] == 1) {
  254. return self::outerr(errcode::ErrHasLogined, '登录后,不能注册新用户.');
  255. }
  256. $mobile = trim($_POST['mobile']);
  257. $password = trim($_POST['passwd']);
  258. $code = trim($_POST['code']);
  259. $validator = new Validator();
  260. $validator->setValidate(Validator::verify_mobile($mobile));
  261. $validator->setValidate(Validator::verify_password($password));
  262. $validator->setValidate(Validator::verify_smscode($code));
  263. $err = $validator->validate();
  264. if ($err != '') {
  265. return self::outerr(errcode::ErrParamter, $err);
  266. }
  267. $ret = sms_helper::check_code(Sms::register_code,$code,$mobile);
  268. if(is_array($ret)) {
  269. return self::outerr($ret['code'], $ret['msg']);
  270. }
  271. $model = Model('member');
  272. $ret =$model->getMemberInfo(array('member_mobile' => $mobile));
  273. if (!empty($ret)) {
  274. return self::outerr(errcode::ErrUserExisted, "用户已经存在.");
  275. }
  276. else
  277. {
  278. $member_info = array('member_mobile' => $mobile,
  279. 'member_type' => self::mobile_login,
  280. 'member_passwd' => $password,
  281. 'member_sex' => 0,
  282. 'member_name' => $mobile,
  283. 'member_nickname' => substr_replace($mobile, '****', 3, 4),
  284. 'member_mobile_bind' => 1);
  285. $insert_id = $model->addMember($member_info);
  286. if ($insert_id == false) {
  287. return self::outerr(errcode::ErrRegister);
  288. }
  289. else
  290. {
  291. $member_info =$model->getMemberInfoByID($insert_id);
  292. $model->createSession($member_info);
  293. Model('cart')->mergecart($member_info, $_SESSION['store_id']);
  294. Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
  295. account_helper::onRegister($_SESSION['member_id']);
  296. session::instance()->set_cookie($_SESSION['MPHPSESSID']);
  297. return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  298. }
  299. }
  300. }
  301. public function resetpassOp()
  302. {
  303. $mobile = trim($_POST['mobile']);
  304. $password = trim($_POST['passwd']);
  305. $code = trim($_POST['code']);
  306. $validator = new Validator();
  307. $validator->setValidate(Validator::verify_mobile($mobile));
  308. $validator->setValidate(Validator::verify_password($password));
  309. $validator->setValidate(Validator::verify_smscode($code));
  310. $err = $validator->validate();
  311. if ($err != '') {
  312. return self::outerr(errcode::ErrParamter, $err);
  313. }
  314. $ret = sms_helper::check_code(Sms::resetpass_code,$code,$mobile);
  315. if(is_array($ret)) {
  316. return self::outerr($ret['code'], $ret['msg']);
  317. }
  318. $model = Model('member');
  319. $ret = $model->editMember(array('member_mobile' => $mobile),array('member_passwd' => md5($password)));
  320. if($ret == false || $model->affected_rows() <= 0)
  321. {
  322. $ret = $model->getMemberInfo(array('member_mobile' => $mobile));
  323. if (empty($ret)) {
  324. return self::outerr(errcode::ErrMemberNotExist, "该手机号未注册");
  325. }
  326. }
  327. return self::outsuccess(NULL);
  328. }
  329. /**
  330. * 微信注册登录
  331. * wx_openid 微信id
  332. * user_info: 用户信息
  333. * mobile: 手机号
  334. * code: 验证码
  335. */
  336. public function bindOp()
  337. {
  338. $wx_openid = trim($_GET['wx_openid']);
  339. $mobile = trim($_GET['mobile']);
  340. $code = trim($_GET['code']);
  341. // 输入内容判断
  342. $validator = new Validator();
  343. $validator->setValidate(Validator::verify_mobile($mobile));
  344. $validator->setValidate(Validator::verify_openid($wx_openid));
  345. $validator->setValidate(Validator::verify_smscode($code));
  346. $err = $validator->validate();
  347. if ($err != '') {
  348. return self::outerr(errcode::ErrInputParam,$err);
  349. }
  350. // 校验验证码
  351. $ret = sms_helper::check_code(Sms::register_code,$code,$mobile);
  352. if(is_array($ret)) {
  353. return self::outerr($ret['code'], $ret['msg']);
  354. }
  355. // 判断是否处理
  356. $model = Model('member');
  357. $ret = $model->getMemberInfo(array('member_mobile' => $mobile));
  358. if (empty($ret))
  359. {
  360. $passwd = $_POST['passwd'];
  361. $validator = new Validator();
  362. $validator->setValidate(Validator::verify_password($passwd));
  363. $err = $validator->validate();
  364. if ($err != '') {
  365. return self::outerr(errcode::ErrInputParam,$err);
  366. }
  367. $member_info = array('member_mobile' => $mobile,
  368. 'member_type' => self::mobile_login,
  369. 'member_passwd' => $passwd,
  370. 'member_sex' => 0,
  371. 'member_name' => $mobile,
  372. 'member_nickname' => substr_replace($mobile, '****', 3, 4),
  373. 'member_mobile_bind' => 1);
  374. $member_id = $model->addMember($member_info);
  375. if(!isset($member_id) || $member_id == false) {
  376. return self::outerr(errcode::ErrMemberNotExist);
  377. } else {
  378. account_helper::onRegister($member_id);
  379. }
  380. }
  381. else {
  382. $member_id = $ret['member_id'];
  383. }
  384. $update_arr = array();
  385. $info = session_helper::parase_wxinfo($_GET['user_info']);
  386. if($info == false) {
  387. $update_arr['member_wxopenid'] = $wx_openid;
  388. } else {
  389. $update_arr['member_wxopenid'] = $wx_openid;
  390. $update_arr = array_merge($update_arr,$info);
  391. }
  392. $ret = $model->editMember(array('member_id' => $member_id), $update_arr);
  393. if (!$ret) {
  394. return self::outerr(errcode::ErrDB);
  395. } else {
  396. $info = $model->getMemberInfoByID($member_id);
  397. $model->createSession($info);
  398. Model('cart')->mergecart($info, $_SESSION['store_id']);
  399. Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
  400. session::instance()->set_cookie($_SESSION['MPHPSESSID']);
  401. return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  402. }
  403. }
  404. }