login.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  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. //登录,获取验证码,注册
  17. class loginControl extends mobileHomeControl
  18. {
  19. const mobile_login = 1;
  20. const wxopen_login = 2;
  21. //客户登录身份类型
  22. protected $client_login_type_array = array(0, 1, 2);
  23. private static $fields = 'member_id,member_mobile,member_wxopenid,member_name,member_truename,member_signname,' .
  24. 'member_nickname,member_avatar,member_sex,member_birthday,member_passwd,member_paypwd,member_email,member_mobile_bind,member_state';
  25. public function __construct()
  26. {
  27. parent::__construct();
  28. }
  29. public function statusOp()
  30. {
  31. if ($_SESSION['is_login'] == '1') {
  32. session::instance()->set_cookie($_SESSION['MPHPSESSID']);
  33. return self::outsuccess(array('member_id' => $_SESSION['member_id']));
  34. } else {
  35. return self::outsuccess(NULL);
  36. }
  37. }
  38. public function loginOp()
  39. {
  40. if ($_SESSION['is_login'] == '1') { //检查是否已经登录
  41. return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  42. }
  43. $type = intval(trim($_POST['type']));
  44. if (!isset($type) || !in_array($type, $this->client_login_type_array)) {
  45. return self::outerr(errcode::ErrParamter, 'type error.');
  46. } else {
  47. $_SESSION['login_type'] = $type;
  48. }
  49. $validate = new Validate();
  50. if ($type == self::mobile_login) {
  51. $openid = trim($_POST['mobile']);
  52. $password = trim($_POST['passwd']);
  53. $validate->setValidate(Validate::verify_mobile($openid));
  54. $validate->setValidate(Validate::verify_password($password));
  55. } else {
  56. $openid = trim($_POST['openid']);
  57. $validate->setValidate(Validate::verify_openid($openid));
  58. }
  59. $error = $validate->validate();
  60. if ($error != '') {
  61. return self::outerr(errcode::ErrParamter, $error);
  62. }
  63. $model_member = Model('member');
  64. $member_info = $this->getMemberInfoEx($model_member,$openid, $type, $password);
  65. if (is_array($member_info) and !empty($member_info))
  66. {
  67. if (!$member_info['member_state']) {
  68. return self::outerr(errcode::ErrAccountStop);
  69. }
  70. }
  71. else
  72. {
  73. if($type == self::wxopen_login) { //如果是开放平台帐号,此处先需要注册
  74. return self::outerr(errcode::ErrWxNotExist);
  75. } else {
  76. return self::outerr(errcode::ErrUserOrPass, "用户名或密码错误");
  77. }
  78. }
  79. $model_member->createSession($member_info);
  80. Model('cart')->mergecart($member_info, $_SESSION['store_id']);
  81. Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
  82. relation_helper::onLogin($_SESSION['member_id']);
  83. session::instance()->set_cookie($_SESSION['MPHPSESSID']);
  84. return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  85. }
  86. private function register_open($model_member,$type,$openid)
  87. {
  88. if($type == self::wxopen_login)
  89. {
  90. $id = $model_member->insert(array('member_wxopenid' => $openid));
  91. if($id > 0) {
  92. return $this->getMemberInfoEx($model_member,$openid,$type);
  93. } else {
  94. return NULL;
  95. }
  96. }
  97. else {
  98. return NULL;
  99. }
  100. }
  101. private function getMemberInfoEx($model_member,$openid, $type, $passwd = '')
  102. {
  103. $conditions = array();
  104. if ($type == self::mobile_login) {
  105. $conditions['member_mobile'] = $openid;
  106. $conditions['member_passwd'] = md5($passwd);
  107. } elseif ($type == self::wxopen_login) {
  108. $conditions['member_wxopenid'] = $openid;
  109. } else {
  110. return NULL;
  111. }
  112. $ret = $model_member->getMemberInfo($conditions,self::$fields);
  113. $member_info = session_helper::filter_member_info($ret,$openid);
  114. return $member_info;
  115. }
  116. public function getcodeOp()
  117. {
  118. $mobile = trim($_POST['mobile']);
  119. $type = trim($_POST['type']);
  120. $validator = new Validate();
  121. $validator->setValidate(Validate::verify_mobile($mobile));
  122. $err = $validator->validate();
  123. if ($err != '') {
  124. return self::outerr(errcode::ErrParamter, $err);
  125. }
  126. $sms = new sms_helper();
  127. $ret = $sms->send($mobile,$type);
  128. if($ret['code'] == 200) {
  129. return self::outsuccess(NULL);
  130. } else {
  131. return self::outerr($ret['code'],$ret['msg']);
  132. }
  133. }
  134. public function getcodexOp()
  135. {
  136. $mobile = trim($_POST['mobile']);
  137. $type = trim($_POST['type']);
  138. $validator = new Validate();
  139. $validator->setValidate(Validate::verify_mobile($mobile));
  140. $err = $validator->validate();
  141. if ($err != '') {
  142. return self::outerr(errcode::ErrParamter, $err);
  143. }
  144. $sms = new sms_helper();
  145. $ret = $sms->send($mobile,$type);
  146. if($ret['code'] == 200)
  147. {
  148. $items = Model('member')->getMemberInfo(array('member_mobile' => $mobile));
  149. if(empty($items)) {
  150. $isMember = false;
  151. } else {
  152. $isMember = true;
  153. }
  154. return self::outsuccess(array('is_member' => $isMember));
  155. } else {
  156. return self::outerr($ret['code'],$ret['msg']);
  157. }
  158. }
  159. public function registerOp()
  160. {
  161. if($_SESSION['is_login'] == 1) {
  162. return self::outerr(errcode::ErrHasLogined, '登录后,不能注册新用户.');
  163. }
  164. $mobile = trim($_POST['mobile']);
  165. $password = trim($_POST['passwd']);
  166. $code = trim($_POST['code']);
  167. $validator = new Validate();
  168. $validator->setValidate(Validate::verify_mobile($mobile));
  169. $validator->setValidate(Validate::verify_password($password));
  170. $validator->setValidate(Validate::verify_smscode($code));
  171. $err = $validator->validate();
  172. if ($err != '') {
  173. return self::outerr(errcode::ErrParamter, $err);
  174. }
  175. $ret = sms_helper::check_code(Sms::register_code,$code,$mobile);
  176. if(is_array($ret)) {
  177. return self::outerr($ret['code'], $ret['msg']);
  178. }
  179. $model = Model('member');
  180. $ret =$model->getMemberInfo(array('member_mobile' => $mobile));
  181. if (!empty($ret)) {
  182. return self::outerr(errcode::ErrUserExisted, "用户已经存在.");
  183. }
  184. else
  185. {
  186. $member_info = array('member_mobile' => $mobile,
  187. 'member_type' => self::mobile_login,
  188. 'member_passwd' => $password,
  189. 'member_sex' => 0,
  190. 'member_name' => $mobile,
  191. 'member_nickname' => substr_replace($mobile, '****', 3, 4),
  192. 'member_mobile_bind' => 1);
  193. $insert_id = $model->addMember($member_info);
  194. if ($insert_id == false) {
  195. return self::outerr(errcode::ErrRegister);
  196. }
  197. else
  198. {
  199. $model->createSession($member_info);
  200. Model('cart')->mergecart($member_info, $_SESSION['store_id']);
  201. Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
  202. account_helper::onRegister($_SESSION['member_id']);
  203. session::instance()->set_cookie($_SESSION['MPHPSESSID']);
  204. return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  205. }
  206. }
  207. }
  208. public function resetpassOp()
  209. {
  210. $mobile = trim($_POST['mobile']);
  211. $password = trim($_POST['passwd']);
  212. $code = trim($_POST['code']);
  213. $validator = new Validate();
  214. $validator->setValidate(Validate::verify_mobile($mobile));
  215. $validator->setValidate(Validate::verify_password($password));
  216. $validator->setValidate(Validate::verify_smscode($code));
  217. $err = $validator->validate();
  218. if ($err != '') {
  219. return self::outerr(errcode::ErrParamter, $err);
  220. }
  221. $ret = sms_helper::check_code(Sms::resetpass_code,$code,$mobile);
  222. if(is_array($ret)) {
  223. return self::outerr($ret['code'], $ret['msg']);
  224. }
  225. $model = Model('member');
  226. $ret = $model->editMember(array('member_mobile' => $mobile),array('member_passwd' => md5($password)));
  227. if($ret == false || $model->affected_rows() <= 0)
  228. {
  229. $ret = $model->getMemberInfo(array('member_mobile' => $mobile));
  230. if (empty($ret)) {
  231. return self::outerr(errcode::ErrMemberNotExist, "该手机号未注册");
  232. }
  233. }
  234. return self::outsuccess(NULL);
  235. }
  236. /**
  237. * 微信注册登录
  238. * wx_openid 微信id
  239. * user_info: 用户信息
  240. * mobile: 手机号
  241. * code: 验证码
  242. */
  243. public function bindOp()
  244. {
  245. $wx_openid = trim($_GET['wx_openid']);
  246. $mobile = trim($_GET['mobile']);
  247. $code = trim($_GET['code']);
  248. // 输入内容判断
  249. $validator = new Validate();
  250. $validator->setValidate(Validate::verify_mobile($mobile));
  251. $validator->setValidate(Validate::verify_openid($wx_openid));
  252. $validator->setValidate(Validate::verify_smscode($code));
  253. $err = $validator->validate();
  254. if ($err != '') {
  255. return self::outerr(errcode::ErrInputParam,$err);
  256. }
  257. // 校验验证码
  258. $ret = sms_helper::check_code(Sms::register_code,$code,$mobile);
  259. if(is_array($ret)) {
  260. return self::outerr($ret['code'], $ret['msg']);
  261. }
  262. // 判断是否处理
  263. $model = Model('member');
  264. // 判断是否已经注册
  265. $ret = $model->getMemberInfo(array('member_mobile' => $mobile));
  266. if (empty($ret))
  267. {
  268. $passwd = $_POST['passwd'];
  269. $validator = new Validate();
  270. $validator->setValidate(Validate::verify_password($passwd));
  271. $err = $validator->validate();
  272. if ($err != '') {
  273. return self::outerr(errcode::ErrInputParam,$err);
  274. }
  275. $member_info = array('member_mobile' => $mobile,
  276. 'member_type' => self::mobile_login,
  277. 'member_passwd' => $passwd,
  278. 'member_sex' => 0,
  279. 'member_name' => $mobile,
  280. 'member_nickname' => substr_replace($mobile, '****', 3, 4),
  281. 'member_mobile_bind' => 1);
  282. $member_id = $model->addMember($member_info);
  283. if(!isset($member_id) || $member_id == false) {
  284. return self::outerr(errcode::ErrMemberNotExist);
  285. }
  286. }
  287. else {
  288. $member_id = $ret['member_id'];
  289. }
  290. $update_arr = array();
  291. $info = session_helper::parase_wxinfo($_GET['user_info']);
  292. if($info == false) {
  293. $update_arr['member_wxopenid'] = $wx_openid;
  294. } else {
  295. $update_arr['member_wxopenid'] = $wx_openid;
  296. $update_arr = array_merge($update_arr,$info);
  297. }
  298. $ret = $model->editMember(array('member_id' => $member_id), $update_arr);
  299. if (!$ret) {
  300. return self::outerr(errcode::ErrDB);
  301. } else {
  302. $info = $model->getMemberInfoByID($member_id);
  303. $model->createSession($info);
  304. Model('cart')->mergecart($info, $_SESSION['store_id']);
  305. Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
  306. account_helper::onRegister($_SESSION['member_id']);
  307. session::instance()->set_cookie($_SESSION['MPHPSESSID']);
  308. return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
  309. }
  310. }
  311. }