login.php 18 KB

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