|
@@ -1,32 +1,244 @@
|
|
|
<?php
|
|
|
+
|
|
|
/**
|
|
|
* 用户身份认证相关操作
|
|
|
*/
|
|
|
|
|
|
+defined('InShopNC') or exit('Access Invalid!');
|
|
|
+
|
|
|
+class LoginType extends SplEnum
|
|
|
+{
|
|
|
+ const __default = self::Login_mobile;
|
|
|
+
|
|
|
+ const Login_mobile = 0;
|
|
|
+ const Login_weixin = 2;
|
|
|
+}
|
|
|
+
|
|
|
class member_loginControl extends mbMemberControl
|
|
|
{
|
|
|
+ const auth_code_expire = 5; // 单位:分钟
|
|
|
+ const token_expire = 600; // 单位:分钟
|
|
|
|
|
|
public function __construct()
|
|
|
{
|
|
|
parent::__construct();
|
|
|
}
|
|
|
|
|
|
+ // 获取验证码
|
|
|
+ public function getacodeOp()
|
|
|
+ {
|
|
|
+ $mobile = trim($_POST['mobile']);
|
|
|
+ $validator = new Validate();
|
|
|
+ $validator->setValidate(Validate::verify_mobile($mobile));
|
|
|
+ $err = $validator->validate();
|
|
|
+ if ($err != '') {
|
|
|
+ return joutput_error(errcode::ErrParamter, $err);
|
|
|
+ }
|
|
|
+ $sms = new Sms();
|
|
|
+ $code = makeSmscode();
|
|
|
+ $status = $sms->send($mobile, array('code' => $code, 'type' => Sms::register_code, 'time' => '5'));
|
|
|
+ if ($status == 0) {
|
|
|
+ $key = func::gen_auth_code_key($mobile);
|
|
|
+ wcache($key, array('code' => $code, 'mobile' => $mobile), '', self::auth_code_expire);
|
|
|
+ } else {
|
|
|
+ return joutput_error(errcode::ErrSms, "send error={$status}.");
|
|
|
+ }
|
|
|
+ joutput_data(NULL);
|
|
|
+ }
|
|
|
+
|
|
|
// 注册
|
|
|
- public function registerOp(){
|
|
|
+ public function registerOp()
|
|
|
+ {
|
|
|
+ $mobile = trim($_GET['mobile']);
|
|
|
+ $acode = trim($_GET['code']);
|
|
|
+ $passwd = trim($_GET['passwd']);
|
|
|
+
|
|
|
+ // 输入内容判断
|
|
|
+ $validator = new Validate();
|
|
|
+ $validator->setValidate(Validate::verify_mobile($mobile));
|
|
|
+ $validator->setValidate(Validate::verify_password($passwd));
|
|
|
+ $err = $validator->validate();
|
|
|
+ if ($err != '' || empty($acode) || empty($passwd)) {
|
|
|
+ return joutput_error(errcode::ErrInputParam);
|
|
|
+ }
|
|
|
|
|
|
+ // 校验验证码
|
|
|
+ if (!$this->checkacode($mobile, $acode)) {
|
|
|
+ return joutput_error(errcode::ErrVerifyCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 判断是否已经注册
|
|
|
+ $model = Model('member');
|
|
|
+ $ret = $model->where(array('member_mobile' => $mobile))->find();
|
|
|
+ if (!empty($ret)) {
|
|
|
+ return joutput_error(errcode::ErrMemberExist);
|
|
|
+ }
|
|
|
+ // 添加注册
|
|
|
+ $member_info = array();
|
|
|
+ $member_info['member_mobile'] = $mobile;
|
|
|
+ $member_info['member_passwd'] = $passwd;
|
|
|
+ $ret = $model->addMember($member_info);
|
|
|
+ if (!$ret) {
|
|
|
+ return joutput_error(errcode::ErrDB);
|
|
|
+ }
|
|
|
+ // 登陆成功
|
|
|
+ joutput_data(null);
|
|
|
}
|
|
|
|
|
|
// 登陆
|
|
|
- public function loginOp(){
|
|
|
+ public function loginOp()
|
|
|
+ {
|
|
|
+ $login_type = trim($_GET['type']);
|
|
|
+ $client = trim($_GET['client']);
|
|
|
+ if (empty($login_type) || empty($client)) {
|
|
|
+ return joutput_error(errcode::ErrInputParam);
|
|
|
+ }
|
|
|
+ switch ($login_type) {
|
|
|
+ case LoginType::Login_mobile:
|
|
|
|
|
|
+ $mobile = trim($_GET['mobile']);
|
|
|
+ $validator = new Validate();
|
|
|
+ $validator->setValidate(Validate::verify_mobile($mobile));
|
|
|
+ $err = $validator->validate();
|
|
|
+ if ($err != '') {
|
|
|
+ return joutput_error(errcode::ErrInputParam);
|
|
|
+ }
|
|
|
+ $passwd = trim($_GET['passwd']);
|
|
|
+ $model = Model('member');
|
|
|
+ $ret = $model->checkPasswd($mobile, $passwd);
|
|
|
+ if ($ret == -1) {
|
|
|
+ return joutput_error(errcode::ErrLogin);
|
|
|
+ } else {
|
|
|
+ $mb_user_token = Model('mb_user_token');
|
|
|
+ $token = $mb_user_token->gen_token($ret['member_id'], $ret['member_name'], $client);
|
|
|
+ if (empty($token)) {
|
|
|
+ return joutput_error(errcode::ErrLogin);
|
|
|
+ } else {
|
|
|
+ return joutput_data(array('token' => $token));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case LoginType::Login_weixin:
|
|
|
+
|
|
|
+ $openid = trim($_GET['openid']);
|
|
|
+ $model = Model('member');
|
|
|
+ $ret = $model->checkWxopenid($openid);
|
|
|
+ if ($ret == -1) {
|
|
|
+ return joutput_error(errcode::ErrWxNotExist);
|
|
|
+ } else {
|
|
|
+ $mb_user_token = Model('mb_user_token');
|
|
|
+ $token = $mb_user_token->gen_token($ret['member_id'], $ret['member_name'], $client);
|
|
|
+ if (empty($token)) {
|
|
|
+ return joutput_error(errcode::ErrLogin);
|
|
|
+ } else {
|
|
|
+ return joutput_data(array('token' => $token));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return joutput_error(errcode::ErrLoginType);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- // 验证校验码
|
|
|
- public function checkvcode(){
|
|
|
+ // 微信绑定账号
|
|
|
+ public function bindOp()
|
|
|
+ {
|
|
|
+ $wx_openid = trim($_GET['wx_openid']);
|
|
|
+ $token = trim($_GET['token']);
|
|
|
+ $user_info = trim($_GET['user_info']);
|
|
|
+
|
|
|
+ $key = func::gen_token_key($token);
|
|
|
+ $ret = rcache($key);
|
|
|
+ $member_info = unserialize($ret);
|
|
|
+ $model = Model('member');
|
|
|
+ $ret = $model->bindwx($member_info['member_id'], $wx_openid);
|
|
|
+ if($ret != 0){
|
|
|
+ return joutput_error(errcode::ErrDB);
|
|
|
+ }
|
|
|
|
|
|
+ return joutput_data(null);
|
|
|
}
|
|
|
|
|
|
- //
|
|
|
+ // 修改密码(目前没有使用)
|
|
|
+ public function chpasswdOp()
|
|
|
+ {
|
|
|
+ $mobile = trim($_GET['mobile']);
|
|
|
+ $oldpasswd = trim($_GET['oldpasswd']);
|
|
|
+ $newpasswd = trim($_GET['newpasswd']);
|
|
|
+
|
|
|
+ // 校验原有用户内容
|
|
|
+ $model = Model('member');
|
|
|
+ $ret = $model->chPasswd($mobile, $oldpasswd, $newpasswd);
|
|
|
+ if ($ret == -1) {
|
|
|
+ return joutput_error(errcode::ErrPasswd);
|
|
|
+ }
|
|
|
+
|
|
|
+ return joutput_data(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 手机验证码找回密码
|
|
|
+ public function getpasswdOp()
|
|
|
+ {
|
|
|
+ $mobile = trim($_GET['mobile']);
|
|
|
+ $acode = trim($_GET['code']);
|
|
|
+ $passwd = trim($_GET['passwd']);
|
|
|
+ $validator = new Validate();
|
|
|
+ $validator->setValidate(Validate::verify_mobile($mobile));
|
|
|
+ $err = $validator->validate();
|
|
|
+ if ($err != '') {
|
|
|
+ return joutput_error(errcode::ErrParamter, $err);
|
|
|
+ }
|
|
|
+ if (!$this->checkacode($mobile, $acode)) {
|
|
|
+ return joutput_error(errcode::ErrVerifyCode);
|
|
|
+ }
|
|
|
+ // 判断用户是否存在
|
|
|
+ $model = Model('member');
|
|
|
+ $result = $model->where(array('member_mobile' => $mobile))->find();
|
|
|
+ if (empty($result)) {
|
|
|
+ return joutput_error(errcode::ErrMemberNotExist);
|
|
|
+ }
|
|
|
+ $ret = $model->uptPasswd($result['member_id'], $passwd);
|
|
|
+ if ($ret == -1) {
|
|
|
+ return joutput_error(errcode::ErrDB);
|
|
|
+ }
|
|
|
+ joutput_data(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 登出
|
|
|
+ public function logoutOp()
|
|
|
+ {
|
|
|
+ $token = trim($_GET['token']);
|
|
|
+ $key = func::gen_token_key($token);
|
|
|
+ dcache($key);
|
|
|
+ joutput_data(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证校验码
|
|
|
+ public function checkacode($mobile, $acode)
|
|
|
+ {
|
|
|
+ $key = func::gen_auth_code_key($mobile);
|
|
|
+ $ret = rcache($key, '');
|
|
|
+ if (empty($ret)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if ($ret['code'] == $acode) {
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ // 通过token获取信息
|
|
|
+ public function getInfoByToken()
|
|
|
+ {
|
|
|
+ $token = trim($_GET['token']);
|
|
|
+ $key = func::gen_token_key($token);
|
|
|
+ $ret = rcache($key);
|
|
|
+ if (empty($result)) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
|
|
|
+ $info = unserialize($ret['info']);
|
|
|
+ return $info;
|
|
|
+ }
|
|
|
}
|