login.php 17 KB

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