/** * * 用户自动注册 * 用户在打开APP进行第一次使用后进行自动注册, * 如果这个手机第一次使用APP则可以自动注册成功, * 如果不是第一次使用,且没有绑定过账号,则进行自动登录 * 如果已使用绑定账号,则需要用户进行登录后才能进入APP使用 * * @param $version -- API版本号,版本控制使用 * @param $deviceId -- IMEI设备ID(open-udid) * @param $platform -- 平台 IOS/Android * @param $channel -- 登录渠道 baidu|91|appstore * @param $appVersion -- App版本号 * @param $osVersion -- 操作系统版本号 * @param $appId -- 应用编号 * @return array */ public function autoRegister($version, $deviceId, $platform, $channel, $appVersion, $osVersion, $appId) { $data = array(); try { // 第一次使用打开App,判断该机器($device_id)有没有旧账号($userId) $user = UserMachineInfo::model()->IsExistUserIdByDeviceId($deviceId); if (!$user) { // 没有账号,自动注册, 插入数据 $registerTime = date("Y-m-d H-i-s", strtotime("now")); //用户注册时间 $lastLoginTime = date("Y-m-d H-i-s", strtotime("now")); //用户最后登录时间,当前为注册时间 // 伪造username $username = '******' . LogMobileCheckcode::model()->getNum(); Yii::app()->cnhutong_user->createCommand()->insert('user', array('username' => $username, 'register_time' => $registerTime, 'last_login_time' => $lastLoginTime)); // 获得刚刚自动注册的userId // $userId = self::getUserIdByAutoRegister(); $userId = Yii::app()->cnhutong_user->getLastInsertID(); //有问题 //注册成功生成token $token = UserToken::model()->getRandomToken(32); $create_ts = date("Y-m-d H-i-s", strtotime("now")); $expire_ts = date("Y-m-d H-i-s", strtotime("+30 day")); Yii::app()->cnhutong_user->createCommand()->insert('user_token', array('user_id' => $userId, 'token' => $token, 'type' => $platform, 'create_ts' => $create_ts, 'expire_ts' => $expire_ts)); // 注册成功insert user_machine_info $register_ip = self::getClientIP(); Yii::app()->cnhutong_user->createCommand()->insert('user_machine_info', array('user_id' => $userId, 'device_id' => $deviceId, 'platform' => $platform, 'version' => $version, 'regist_ip' => $register_ip, 'register_time' => $registerTime)); //userId $data['userId'] = $userId; //token $data['token'] = UserToken::model()->getToken($userId); //用户昵称,积分,等级 $userMessage = self::getUserMessageByUserId($userId); $data['mobile'] = $userMessage['mobile']; $data['nickname'] = $userMessage['username']; $data['points'] = $userMessage['score']; $data['level'] = $userMessage['level']; //members $data['members'] = UserMember::model()->getMembers($userId); if (!$data['members']) { $data['members'] = []; } return $data; } else { //机器中有账号,继续判断userId唯一且密码为空。则自动登录,否则跳转到账号密码登录页面 $aUser = self::IsAutoLogin($user); if ($aUser) { // 唯一且手机号/密码为空, 未绑定手机,自动登录 //userId $data['userId'] = $aUser; //token $data['token'] = UserToken::model()->getToken($aUser); //用户昵称,积分,等级 $userMessage = self::getUserMessageByUserId($aUser); $data['mobile'] = $userMessage['mobile']; $data['nickname'] = $userMessage['username']; $data['points'] = $userMessage['score']; $data['level'] = $userMessage['level']; //members $data['members'] = UserMember::model()->getMembers($aUser); if (!$data['members']) { $data['members'] = []; } return $data; } else { // 有账号密码,绑定了手机号,账号密码登录 return 50000; } } } catch (Exception $e) { error_log($e); } // return $data; }
/** * 系统注册账号 */ public function actionSysRegister() { $user_transaction = Yii::app()->db_user->beginTransaction(); $characters_transaction = Yii::app()->db_characters->beginTransaction(); $token_transaction = Yii::app()->db_token->beginTransaction(); $now = date("Y-m-d H:i:s"); $is_register = trim(Yii::app()->request->getParam('is_register')); try { $password = null; if ($is_register != 1) { $lastAccountData = User::model()->getLastAccount(); if ($lastAccountData) { if ($lastAccountData['password'] != null) { //修改过密码,请登录 $this->_return('MSG_ERR_EDIT_PASSWORD_LOGIN'); } $user_id = $lastAccountData['user_id']; $token = Token::model()->getUserToken($user_id, $GLOBALS['__APPID']); if (!isset($token)) { //创建token $token = Token::model()->insertUserToken($user_id, $GLOBALS['__APPID']); } else { //返回的token 值 $token = Token::model()->updateUserToken($user_id, $GLOBALS['__APPID']); } $data = array(); $data['username'] = $lastAccountData['user_name']; $data['token'] = $token; $data['user_id'] = (int) $user_id; $user_transaction->commit(); $characters_transaction->commit(); $token_transaction->commit(); $this->_return('MSG_SUCCESS', $data); } } //用户表 goddess_user.user AND goddess_user.user%02s 插入 $res = User::model()->SysInsertUser($password); $user_id = $res['user_id']; //用户信息 goddess_user.user_info 插入 UserInfo::model()->insertUserInfo($user_id, 0, '', '', 0, '游客'); //硬件信息 goddess_user.user_machine_info 插入 UserMachineInfo::model()->insertUserMachineInfo($user_id, $GLOBALS['__IP'], $GLOBALS['__DEVICEID'], $GLOBALS['__PLATFORM'], $GLOBALS['__APPVERSION'], $GLOBALS['__CHANNEL'], $GLOBALS['__OSVERSION']); // 创建游戏内帐号 Consumer::model()->createGameCharacters($user_id, $now); /* switch($GLOBALS['__APPID']) { // goddess 女神零距离 case 10 : Consumer::model()->createGameCharacters($user_id, $now); break; default : Consumer::model()->createGameCharacters($user_id, $now); break; } */ //创建token $token = Token::model()->insertUserToken($user_id, $GLOBALS['__APPID']); //每日玫瑰发放 Characters::model()->everyRose($user_id); // 提交事务 $user_transaction->commit(); $characters_transaction->commit(); $token_transaction->commit(); // 注册成功 写入日志 Log::model()->_user_log($user_id, 'SYS_USER_ACTIVE', date('Y-m-d H:i:s'), ''); } catch (Exception $e) { error_log($e); $user_transaction->rollback(); $characters_transaction->rollback(); $token_transaction->rollback(); $this->_return('MSG_ERR_UNKOWN'); } if ($user_id <= 0) { $this->_return('MSG_ERR_UNKOWN'); } // 发送返回值 $data = array(); $data['username'] = $res['user_name']; $data['token'] = $token; $data['user_id'] = (int) $user_id; $this->_return('MSG_SUCCESS', $data); }