示例#1
0
 /**
  * 获取发送短信的令牌
  * @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;
 }
示例#2
0
 /**
  * 获取用户凭证(包括获取超级用户的用户凭证)
  * 超级用户ID:-1(程序内部推送消息需要用到)
  * @param $userId 用户ID   -1:获取超级用户的用户凭证
  * @param $expire 期限(秒) -1:没有生存期限,一直保存在Redis中
  * @return false:生成失败   其它值:$userToken 用户凭证
  */
 protected function getUserToken($userId, $expire = 3600)
 {
     $maxNums = 7;
     // 最多循环生成次数
     $userToken = false;
     $isSuccess = false;
     // 记录是否生成userToken成功
     for ($i = 0; $i < $maxNums; $i++) {
         $userToken = generateUserToken($userId);
         $saveUserId = p\MyRedis::get("token.to.userid:{$userToken}");
         if ($saveUserId) {
             // 用户凭证已经存在
             $isSuccess = false;
             continue;
         } else {
             $isSuccess = true;
             if ($expire == -1) {
                 // 没有生存期限,一直保存在Redis中
                 p\MyRedis::set("token.to.userid:{$userToken}", $userId);
             } else {
                 p\MyRedis::set("token.to.userid:{$userToken}", $userId, $expire);
             }
             break;
         }
     }
     if (!$isSuccess) {
         $userToken = false;
     }
     // 生成失败
     return $userToken;
 }