/** * @param $openId * @return TAR_WechatUser */ public static function getWeChatUserByOpenId($openId) { $mcdKey = 'm:weChatUserService?openId=' . $openId; $user = Wk::redis()->get($mcdKey); if ($user === false) { $user = TAR_WechatUser::findOne("where open_id = ?", "s", $openId); if (isset($user)) { Wk::redis()->set($mcdKey, serialize($user), 60 * 60 * 24); } } else { $user = unserialize($user); } return $user; }
/** * 微信登录 * @param $openId * @return Wk_User * @throws Wk_Exception */ public function submitLoginWithWechat($openId) { $firstLogin = false; $wechatUserInfo = TAR_WechatUser::findOne("where open_id = ?", "s", $openId); if (!isset($wechatUserInfo) || empty($wechatUserInfo)) { throw new Wk_Exception("", TErrorConstants::E_SNS_LOGIN); } $user = TAR_User::findOne("where open_id = ?", "s", $openId); if (!isset($user) || empty($user)) { $firstLogin = true; $user = new TAR_User(); } $user->headImgUrl = $wechatUserInfo->headImgUrl; $user->nickname = $wechatUserInfo->nickname; $user->createTime = date("Y-m-d H:i:s"); $user->mobile = ""; // 微信渠道注册 $user->source = 1; $user->city = $wechatUserInfo->city; $user->province = $wechatUserInfo->province; $user->lastLoginIp = WkUtils::getClientIp(); $user->lastLoginTime = date("Y-m-d H:i:s"); $user->save(); $tokenstring = md5(md5($user->id . $user->openId . date("Y-m")) . self::PASSWORD_SALT); $token = TAR_Usertoken::findOne("where token = ? and is_deleted = 0", "s", $tokenstring); if (!isset($token) || empty($token)) { $token = new TAR_Usertoken(); } $token->token = $tokenstring; $token->userId = $user->id; $token->expire = "0000-00-00 00:00:00"; $token->logintype = "wechat"; $token->save(); $retUser = new Wk_User(); $retUser->mobile = $user->mobile; $retUser->city = $user->city; $retUser->province = $user->province; $retUser->avatarUrl = $user->headImgUrl; $retUser->nickname = $user->nickname; $retUser->userid = $user->id; $retUser->token = $token->token; return $retUser; }