/** * 获取发送短信的令牌 * @param Boolean $flag 是否请求新令牌:true-请求(不管本地Redis是否保存令牌) false-不请求(首先从本地Redis中取,没有的话再向服务器请求) * @return String 令牌 */ private static function getAccessToken($flag) { if (!$flag) { // 首先从本地Redis中取 $accesstoken = MyRedis::get('sms.accesstoken'); if ($accesstoken) { return $accesstoken; } } $url = "https://oauth.api.189.cn/emp/oauth2/v3/access_token"; $postData['grant_type'] = 'client_credentials'; $postData['app_id'] = YsSmSService::APPID; $postData['app_secret'] = YsSmSService::APPSECRET; foreach ($postData as $key => $value) { $post[] = $key . '=' . $value; } $curl = new t\Curl(); $resultJson = $curl->post($url, implode('&', $post)); $resObj = json_decode($resultJson); $expiers = intval($resObj->expires_in); $accesstoken = $resObj->access_token; if ($expiers > 0) { MyRedis::set('sms.accesstoken', $accesstoken, $expiers); } return $accesstoken; }
private function kickUserOffline($userID) { // 删除用户userToken,踢用户下线 $userToken = p\MyRedis::hashGet("user.info:{$userID}", 'usertoken'); if ($userToken) { p\MyRedis::delete("token.to.userid:{$userToken}"); // 删除用户userToken p\MyRedis::delete("user.info:{$userID}"); } }
protected function getCommonUserTokenByUid($userId) { $userToken = p\MyRedis::hashGet("user.info:{$userId}", 'usertoken'); if (!$userToken) { // 不存在才生成 $expire = 5 * 24 * 3600; // userToken有效期暂时设置为5天 $userToken = $this->getUserToken($userId, $expire); $userInfo = array(); // 需要保存的用户信息 $userInfo['usertoken'] = $userToken; $userInfo['logintype'] = 0; // 0:表示程序内部登录,非用户登录 $userInfo['logintime'] = time(); // 登录时间 $this->saveUserInfoToRedis($userId, $userInfo, $expire + 60); // 保存新用户凭证到Redis中(备注:过期时间延长1分钟) } return $userToken; }