login.php 11 KB

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