/** * 获取发送短信的令牌 * @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; }
/** * 获取超级用户的用户凭证,并将用户凭证保存到Redis中 * 超级用户ID:-1(程序内部推送消息需要用到) * 店员版:userid = -1 usertoken = GZSDYSBANGPHARMA user.info:$userId token.to.userid:$userToken * 大众版:userid = -1 usertoken = GZSDYSBANGPUBLIC user.info.pub:$userId token.to.userid.pub:$userToken * 工业版:userid = -1 usertoken = GZSDYSBANGINDUST user.info.ind:$userId token.to.userid.ind:$userToken * @return false:生成失败 其它值:$userToken 用户凭证 */ protected function getSuperUserToken() { $userId = -1; // 超级用户ID:-1(店员版程序内部推送消息需要用到) $userToken = p\MyRedis::hashGet("user.info:{$userId}", 'usertoken'); if (!$userToken) { // 不存在才生成 //$userToken = $this->getUserToken($userId,-1); // 直接定义16位token(app用户登陆生成token是32位) $userToken = 'GZSDYSBANGPHARMA'; // 店员版后台推送专用TOKEN p\MyRedis::set("token.to.userid:{$userToken}", $userId); // 保存到Redis中 $userInfo = array(); $userInfo['usertoken'] = $userToken; $userInfo['logintype'] = 0; // 0:表示程序内部登录,非用户登录 $userInfo['logintime'] = time(); // 登录时间 $this->saveUserInfoToRedis($userId, $userInfo); } return $userToken; }