123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688 |
- <?php
- /**
- * 用户身份认证相关操作
- */
- defined('InShopNC') or exit('Access Invalid!');
- require_once(BASE_DATA_PATH . '/model/member.model.php');
- require_once(BASE_CORE_PATH . '/framework/libraries/sms.php');
- require_once(BASE_CORE_PATH . '/framework/function/core.php');
- require_once(BASE_ROOT_PATH . '/helper/sms_helper.php');
- require_once(BASE_ROOT_PATH . '/helper/field_helper.php');
- require_once(BASE_ROOT_PATH . '/helper/session_helper.php');
- require_once(BASE_ROOT_PATH . '/helper/relation_helper.php');
- require_once(BASE_ROOT_PATH . '/helper/account_helper.php');
- require_once(BASE_ROOT_PATH . '/helper/session.php');
- require_once(BASE_ROOT_PATH . '/helper/login_helper.php');
- //登录,获取验证码,注册
- class loginControl extends mobileHomeControl
- {
- const mobile_login = 1;
- const wxopen_login = 2;
- const wxunion_login = 3;
- //客户登录身份类型
- protected $client_login_type_array = array(0, 1, 2);
- private static $fields = 'member_id,member_mobile,member_wxunionid,member_wxopenid,member_name,member_truename,member_signname,' .
- 'member_nickname,member_avatar,member_sex,member_birthday,member_passwd,member_paypwd,member_email,member_mobile_bind,member_state';
- public function __construct() {
- parent::__construct();
- }
- public function statusOp()
- {
- if (session_helper::logined()) {
- session::instance()->set_cookie(session_helper::session_id());
- account_helper::onStatus(session_helper::memberid());
- return self::outsuccess($this->ret_value());
- }
- else {
- $fcode = new user_session\fcode();
- $fcode->onStatus();
- return self::outsuccess($this->ret_value());
- }
- }
- private function ret_value()
- {
- $has_mobile = empty($_SESSION['member_mobile']) ? false : true;
- if(!$has_mobile) {
- $has_mobile = session_helper::has_regmobile();
- }
- $has_author = empty($_SESSION['member_wxunionid']) ? false : true;
- if(!$has_author) {
- $has_author = wechat_helper::has_userinfo();
- }
- $ret = ['ismember' => $has_mobile, 'isauthor' => $has_author, //for前向兼容
- 'hasmobile' => $has_mobile, 'hasauthor'=> $has_author,
- 'member_id' => session_helper::memberid(),
- 'HPHPSESSID' => session_helper::session_id(),
- 'userinfo' => $this->userinfo()];
- return $ret;
- }
- private function userinfo()
- {
- $result = [];
- $result['member_avatar'] = session_helper::avatar();
- $result['member_mobile'] = session_helper::mobile();
- $result['member_nickname'] = session_helper::nickname();
- $result['member_sex'] = session_helper::sex();
- $result['qrcode'] = session_helper::qrcode();
- return $result;
- }
- public function wxauthorOp()
- {
- if(session_helper::logined()) {
- return self::outsuccess($this->ret_value());
- }
- $user_info = $_GET['user_info'];
- if(empty($user_info)) {
- return self::outerr(errcode::ErrParamter, "上传的用户信息为空.");
- }
- $user_info = json_decode($user_info,true);
- if(empty($user_info)) {
- return self::outerr(errcode::ErrParamter, "上传的用户信息为空.");
- }
- //cur-> wx
- $unionid_loginner = new login\open_userinfo_log($user_info);
- if($unionid_loginner->ismember())
- {
- if($unionid_loginner->binded_mobile())
- {
- //pre-> mobile
- if(session_helper::has_regmobile())
- {
- $mobile = session_helper::get_regmobile();
- $mobile_loginner = new login\mobile_log($mobile);
- if($mobile_loginner->ismember()) {
- $unionid_loginner->unbind_wechat();
- $mobile_loginner->bind($user_info,$mobile);
- $mobile_loginner->login();
- }
- else {
- $unionid_loginner->bind($user_info,$mobile); //前向兼容很久前用openid登录情况。
- $unionid_loginner->login();
- }
- }
- else
- {
- $unionid_loginner->bind($user_info);
- $unionid_loginner->login();
- }
- account_helper::onLogin(session_helper::memberid());
- }
- else
- {
- //pre-> mobile
- if(session_helper::has_regmobile())
- {
- $mobile = session_helper::get_regmobile();
- $mobile_loginner = new login\mobile_log($mobile);
- if($mobile_loginner->ismember()) {
- $unionid_loginner->unbind_wechat();
- $mobile_loginner->bind($user_info,$mobile);
- $mobile_loginner->login();
- }
- else {
- $unionid_loginner->bind($user_info,$mobile); //前向兼容很久前用openid登录情况。
- $unionid_loginner->login();
- }
- account_helper::onLogin(session_helper::memberid());
- session_helper::clear_regmobile();
- wechat_helper::clear_wxinfo();
- }
- else {
- wechat_helper::set_userinfo($user_info);
- }
- }
- }
- else
- {
- if(session_helper::has_regmobile())
- {
- $mobile = session_helper::get_regmobile();
- $mobile_loginner = new login\mobile_log($mobile);
- if($mobile_loginner->ismember()) {
- $mobile_loginner->bind($user_info);
- $mobile_loginner->login();
- }
- else {
- $unionid_loginner->register($user_info,session_helper::relay_id(),$mobile);
- $unionid_loginner->login();
- account_helper::onRegister(session_helper::memberid(),session_helper::relay_id());
- session_helper::clear_regmobile();
- wechat_helper::clear_wxinfo();
- }
- account_helper::onLogin(session_helper::memberid());
- }
- else {
- wechat_helper::set_userinfo($user_info);
- }
- }
- return self::outsuccess($this->ret_value());
- }
- public function ministartOp()
- {
- $code = $_GET['code'];
- if (empty($code)) return self::outerr(errcode::ErrParamter);
- $appid = \MiniPay\WxPayConfig::APPID;
- $app_secret = \MiniPay\WxPayConfig::APPSECRET;
- $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$app_secret}&js_code={$code}&grant_type=authorization_code";
- $resp = http_request($url);
- if ($resp == false) {
- return self::outerr(errcode::ErrLogin);
- }
- else
- {
- $body = json_decode($resp,true);
- if (isset($body['errcode'])) {
- return self::outerr(errcode::ErrApptype,"获取appid失败");
- }
- else {
- return self::outsuccess($body);
- }
- }
- }
- private function is_special($mobile,$code)
- {
- if($mobile == '13700000000' && $code == '1111') {
- return true;
- }
- else if($mobile == '13800000000' && $code == '1111') {
- return true;
- }
- else if($mobile == '13900000000' && $code == '1111') {
- return true;
- }
- else {
- return false;
- }
- }
- public function bind_mobilexOp()
- {
- if(session_helper::logined()) {
- return self::outsuccess($this->ret_value());
- }
- $mobile = trim($_GET['mobile']);
- $code = trim($_GET['code']);
- //一些平台测试账户,特殊处理
- if($this->is_special($mobile,$code))
- {
- if(login_helper::onBinded($mobile,0)) {
- return self::outsuccess($this->ret_value());
- }
- }
- // 输入内容判断
- $validator = new Validator();
- $validator->setValidate(Validator::verify_mobile($mobile));
- $validator->setValidate(Validator::verify_smscode($code));
- $err = $validator->validate();
- if ($err != '') {
- return self::outerr(errcode::ErrInputParam,$err);
- }
- // 校验验证码
- $ret = sms_helper::check_code(Sms::register_code,$code,$mobile);
- if(is_array($ret)) {
- return self::outerr($ret['code'], $ret['msg']);
- }
- //cur-> mobile
- $mobile_loginner = new login\mobile_log($mobile);
- if($mobile_loginner->ismember())
- {
- if($mobile_loginner->binded_wechat())
- {
- //pre->wx
- if(wechat_helper::has_userinfo())
- {
- $user_info = wechat_helper::userinfo();
- $union_logginer = new login\open_userinfo_log($user_info);
- if($union_logginer->ismember()) {
- $mobile_loginner->unbind_mobile();
- $union_logginer->bind([],$mobile);
- $union_logginer->login();
- }
- else{
- $mobile_loginner->bind(wechat_helper::userinfo());
- $mobile_loginner->login();
- }
- session_helper::clear_regmobile();
- wechat_helper::clear_wxinfo();
- }
- else {
- $mobile_loginner->login();
- }
- account_helper::onLogin(session_helper::memberid());
- }
- else
- {
- //pre->wx
- if(wechat_helper::has_userinfo())
- {
- $user_info = wechat_helper::userinfo();
- $union_logginer = new login\open_userinfo_log($user_info);
- if($union_logginer->ismember()) {
- $mobile_loginner->unbind_mobile();
- $union_logginer->bind([],$mobile);
- $union_logginer->login();
- }
- else {
- $mobile_loginner->bind(wechat_helper::userinfo());
- $mobile_loginner->login();
- }
- account_helper::onLogin(session_helper::memberid());
- session_helper::clear_regmobile();
- wechat_helper::clear_wxinfo();
- }
- else {
- session_helper::set_regmobile($mobile);
- }
- }
- }
- else
- {
- //pre->wx
- if(wechat_helper::has_userinfo())
- {
- $user_info = wechat_helper::userinfo();
- $union_logginer = new login\open_userinfo_log($user_info);
- if($union_logginer->ismember()) {
- $union_logginer->bind([],$mobile);
- $union_logginer->login();
- }
- else {
- $mobile_loginner->register($user_info,session_helper::relay_id(),$mobile);
- $mobile_loginner->login();
- account_helper::onRegister($mobile_loginner->memberid(),session_helper::relay_id());
- }
- account_helper::onLogin(session_helper::memberid());
- session_helper::clear_regmobile();
- wechat_helper::clear_wxinfo();
- }
- else {
- session_helper::set_regmobile($mobile);
- }
- }
- return self::outsuccess($this->ret_value());
- }
- public function bind_mobileOp()
- {
- $mobile = trim($_GET['mobile']);
- $code = trim($_GET['code']);
- if($this->is_special($mobile,$code))
- {
- if(login_helper::onBinded($mobile,0)) {
- return self::outsuccess($this->ret_value());
- }
- }
- // 输入内容判断
- $validator = new Validator();
- $validator->setValidate(Validator::verify_mobile($mobile));
- $validator->setValidate(Validator::verify_smscode($code));
- $err = $validator->validate();
- if ($err != '') {
- return self::outerr(errcode::ErrInputParam,$err);
- }
- // 校验验证码
- $ret = sms_helper::check_code(Sms::register_code,$code,$mobile);
- if(is_array($ret)) {
- return self::outerr($ret['code'], $ret['msg']);
- }
- if(login_helper::onBinded($mobile,session_helper::relay_id())) {
- return self::outsuccess($this->ret_value());
- } else {
- return self::outerr(errcode::ErrDB,"对不起,系统出现错误:(");
- }
- }
- public function getcodexOp()
- {
- if(empty(session_helper::session_id())) {
- return self::outerr(errcode::ErrParamter);
- }
- if(session_helper::isapp() == false && util::from_wechat() == false) {
- return self::outerr(errcode::ErrParamter);
- }
- $mobile = trim($_POST['mobile']);
- $type = trim($_POST['type']);
- $validator = new Validator();
- $validator->setValidate(Validator::verify_mobile($mobile));
- $err = $validator->validate();
- if ($err != '') {
- return self::outerr(errcode::ErrParamter, $err);
- }
- $sms = new sms_helper();
- $ret = $sms->send($mobile,$type);
- if($ret['code'] == 200)
- {
- $items = Model('member')->getMemberInfo(array('member_mobile' => $mobile));
- if(empty($items)) {
- $isMember = false;
- } else {
- $isMember = true;
- }
- return self::outsuccess(['is_member' => $isMember]);
- }
- else {
- return self::outerr($ret['code'],$ret['msg']);
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- public function loginOp()
- {
- if ($_SESSION['is_login'] == '1') { //检查是否已经登录
- return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
- }
- $type = intval(trim($_POST['type']));
- if (!isset($type) || !in_array($type, $this->client_login_type_array)) {
- return self::outerr(errcode::ErrParamter, 'type error.');
- } else {
- $_SESSION['login_type'] = $type;
- }
- $validate = new Validator();
- if ($type == self::mobile_login) {
- $openid = trim($_POST['mobile']);
- $password = trim($_POST['passwd']);
- $validate->setValidate(Validator::verify_mobile($openid));
- $validate->setValidate(Validator::verify_password($password));
- } else {
- $openid = trim($_POST['openid']);
- $validate->setValidate(Validator::verify_openid($openid));
- }
- $error = $validate->validate();
- if ($error != '') {
- return self::outerr(errcode::ErrParamter, $error);
- }
- $model_member = Model('member');
- $member_info = $this->getMemberInfoEx($model_member,$openid, $type, $password);
- if (is_array($member_info) and !empty($member_info))
- {
- if (!$member_info['member_state']) {
- return self::outerr(errcode::ErrAccountStop);
- }
- }
- else
- {
- if($type == self::wxopen_login) { //如果是开放平台帐号,此处先需要注册
- return self::outerr(errcode::ErrWxNotExist);
- } else {
- return self::outerr(errcode::ErrUserOrPass, "该手机号码未注册或者密码错误");
- }
- }
- $model_member->createSession($member_info);
- Model('cart')->mergecart($member_info, $_SESSION['store_id']);
- Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
- account_helper::onLogin($_SESSION['member_id']);
- session::instance()->set_cookie($_SESSION['MPHPSESSID']);
- return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
- }
- private function getMemberInfoEx($model_member,$openid, $type, $passwd = '')
- {
- $conditions = array();
- if ($type == self::mobile_login) {
- $conditions['member_mobile'] = $openid;
- $conditions['member_passwd'] = md5($passwd);
- } elseif ($type == self::wxopen_login) {
- $conditions['member_wxopenid'] = $openid;
- } else {
- return NULL;
- }
- $ret = $model_member->getMemberInfo($conditions,self::$fields);
- $member_info = session_helper::filter_member_info($ret,$openid);
-
- return $member_info;
- }
- public function getcodeOp()
- {
- if(empty(session_helper::session_id())) {
- return self::outerr(errcode::ErrParamter);
- }
- if(session_helper::isapp() == false && util::from_wechat() == false) {
- return self::outerr(errcode::ErrParamter);
- }
- $mobile = trim($_POST['mobile']);
- $type = trim($_POST['type']);
- $validator = new Validator();
- $validator->setValidate(Validator::verify_mobile($mobile));
- $err = $validator->validate();
- if ($err != '') {
- return self::outerr(errcode::ErrParamter, $err);
- }
- $sms = new sms_helper();
- $ret = $sms->send($mobile,$type);
- if($ret['code'] == 200) {
- return self::outsuccess(NULL);
- } else {
- return self::outerr($ret['code'],$ret['msg']);
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- public function registerOp()
- {
- if($_SESSION['is_login'] == 1) {
- return self::outerr(errcode::ErrHasLogined, '登录后,不能注册新用户.');
- }
- $mobile = trim($_POST['mobile']);
- $password = trim($_POST['passwd']);
- $code = trim($_POST['code']);
- $validator = new Validator();
- $validator->setValidate(Validator::verify_mobile($mobile));
- $validator->setValidate(Validator::verify_password($password));
- $validator->setValidate(Validator::verify_smscode($code));
- $err = $validator->validate();
- if ($err != '') {
- return self::outerr(errcode::ErrParamter, $err);
- }
- $ret = sms_helper::check_code(Sms::register_code,$code,$mobile);
- if(is_array($ret)) {
- return self::outerr($ret['code'], $ret['msg']);
- }
- $model = Model('member');
- $ret =$model->getMemberInfo(array('member_mobile' => $mobile));
- if (!empty($ret)) {
- return self::outerr(errcode::ErrUserExisted, "用户已经存在.");
- }
- else
- {
- $member_info = array('member_mobile' => $mobile,
- 'member_type' => self::mobile_login,
- 'member_passwd' => $password,
- 'member_sex' => 0,
- 'member_name' => $mobile,
- 'member_nickname' => substr_replace($mobile, '****', 3, 4),
- 'member_mobile_bind' => 1);
- $insert_id = $model->addMember($member_info);
- if ($insert_id == false) {
- return self::outerr(errcode::ErrRegister);
- }
- else
- {
- $member_info =$model->getMemberInfoByID($insert_id);
- $model->createSession($member_info);
- Model('cart')->mergecart($member_info, $_SESSION['store_id']);
- Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
- account_helper::onRegister($_SESSION['member_id'],session_helper::relay_id());
- session::instance()->set_cookie($_SESSION['MPHPSESSID']);
- return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
- }
- }
- }
- public function resetpassOp()
- {
- $mobile = trim($_POST['mobile']);
- $password = trim($_POST['passwd']);
- $code = trim($_POST['code']);
- $validator = new Validator();
- $validator->setValidate(Validator::verify_mobile($mobile));
- $validator->setValidate(Validator::verify_password($password));
- $validator->setValidate(Validator::verify_smscode($code));
- $err = $validator->validate();
- if ($err != '') {
- return self::outerr(errcode::ErrParamter, $err);
- }
- $ret = sms_helper::check_code(Sms::resetpass_code,$code,$mobile);
- if(is_array($ret)) {
- return self::outerr($ret['code'], $ret['msg']);
- }
-
- $model = Model('member');
- $ret = $model->editMember(array('member_mobile' => $mobile),array('member_passwd' => md5($password)));
- if($ret == false || $model->affected_rows() <= 0)
- {
- $ret = $model->getMemberInfo(array('member_mobile' => $mobile));
- if (empty($ret)) {
- return self::outerr(errcode::ErrMemberNotExist, "该手机号未注册");
- }
- }
- return self::outsuccess(NULL);
- }
- /**
- * 微信注册登录
- * wx_openid 微信id
- * user_info: 用户信息
- * mobile: 手机号
- * code: 验证码
- */
- public function bindOp()
- {
- $wx_openid = trim($_GET['wx_openid']);
- $mobile = trim($_GET['mobile']);
- $code = trim($_GET['code']);
- // 输入内容判断
- $validator = new Validator();
- $validator->setValidate(Validator::verify_mobile($mobile));
- $validator->setValidate(Validator::verify_openid($wx_openid));
- $validator->setValidate(Validator::verify_smscode($code));
- $err = $validator->validate();
- if ($err != '') {
- return self::outerr(errcode::ErrInputParam,$err);
- }
- // 校验验证码
- $ret = sms_helper::check_code(Sms::register_code,$code,$mobile);
- if(is_array($ret)) {
- return self::outerr($ret['code'], $ret['msg']);
- }
- // 判断是否处理
- $model = Model('member');
- $ret = $model->getMemberInfo(array('member_mobile' => $mobile));
- if (empty($ret))
- {
- $passwd = $_POST['passwd'];
- $validator = new Validator();
- $validator->setValidate(Validator::verify_password($passwd));
- $err = $validator->validate();
- if ($err != '') {
- return self::outerr(errcode::ErrInputParam,$err);
- }
- $member_info = array('member_mobile' => $mobile,
- 'member_type' => self::mobile_login,
- 'member_passwd' => $passwd,
- 'member_sex' => 0,
- 'member_name' => $mobile,
- 'member_nickname' => substr_replace($mobile, '****', 3, 4),
- 'member_mobile_bind' => 1);
- $member_id = $model->addMember($member_info);
- if(!isset($member_id) || $member_id == false) {
- return self::outerr(errcode::ErrMemberNotExist);
- } else {
- account_helper::onRegister($member_id,session_helper::relay_id());
- }
- }
- else {
- $member_id = $ret['member_id'];
- }
- $update_arr = array();
- $info = session_helper::parase_wxinfo($_GET['user_info']);
- if($info == false) {
- $update_arr['member_wxopenid'] = $wx_openid;
- } else {
- $update_arr['member_wxopenid'] = $wx_openid;
- $update_arr = array_merge($update_arr,$info);
- }
- $ret = $model->editMember(array('member_id' => $member_id), $update_arr);
- if (!$ret) {
- return self::outerr(errcode::ErrDB);
- } else {
- $info = $model->getMemberInfoByID($member_id);
- $model->createSession($info);
- Model('cart')->mergecart($info, $_SESSION['store_id']);
- Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
- session::instance()->set_cookie($_SESSION['MPHPSESSID']);
- return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
- }
- }
- }
|