Exemple #1
0
 public static function getInstance()
 {
     if (self::$instance === NULL) {
         self::$instance = new Vera_Cache();
     }
     return self::$instance;
 }
Exemple #2
0
 /**
  * 执行签到
  * @param  string $act 活动token
  * @param  string $user openId
  * @return int      签到排名,失败返回false
  */
 public static function checkin($act, $user, $nickname)
 {
     $item = array('openid' => $user, 'time' => date("Y-m-d H:i:s", time()), 'nickname' => $nickname);
     $cache = Vera_Cache::getInstance();
     $key = 'rollcall_' . $act . '_list';
     $rank = false;
     do {
         $list = $cache->get($key, NULL, $cas);
         //使用Memcached特性cas,保证高并发时的准确性
         if ($cache->getResultCode() == Memcached::RES_NOTFOUND) {
             if ($list = Library_File::load($act)) {
                 if (!($rank = self::getRank($list, $user))) {
                     $list[] = $item;
                     $rank = count($list);
                 }
                 $newList = $list;
             } else {
                 $newList = array($item);
                 //两层Array
                 $rank = 1;
             }
             $cache->add($key, $newList, 86400);
             //原子性的插入,签到记录的缓存保存二十四小时
         } else {
             if (!($rank = self::getRank($list, $user))) {
                 $list[] = $item;
                 $cache->cas($cas, $key, $list);
                 $rank = count($list);
             }
         }
     } while ($cache->getResultCode() != Memcached::RES_SUCCESS);
     return $rank;
 }
Exemple #3
0
 /**
  * 扫码送网薪接口
  * @param string $num 厦大学号
  * @param int $award 发放网薪额度
  * @param string $act 扫码活动md5
  * @param string $end 扫码活动结束时间
  * @return string 网薪发放情况
  * @author Nili
  */
 public static function pay($num, $award, $act, $end)
 {
     $yibanInfo = Data_Db::getYibanInfoByXmuNum($num);
     $key = 'rollcall_' . $act . '_award' . $num;
     $cache = Vera_Cache::getInstance();
     if (!empty($cache->get($key))) {
         return '您已在该活动获得过网薪';
     }
     if (!$yibanInfo['yiban_islinked']) {
         return '未绑定易班身份,无法获得网薪';
     }
     if ($yibanInfo['expire_time'] < date('Y-m-d H:i:s')) {
         return '易班身份已过期,无法获得网薪';
     }
     Vera_Autoload::changeApp('yiban');
     $ret = Data_Yiban::awardSalary($yibanInfo['yiban_uid'], $yibanInfo['access_token'], $award);
     Vera_Autoload::reverseApp();
     if ($ret) {
         $cache->set($key, 1, $end);
         return "{$award}网薪已发往您的账户";
     } else {
         return '';
         //网薪发放失败
     }
 }
Exemple #4
0
 public function run()
 {
     $acts = self::getActs();
     $cache = Vera_Cache::getInstance();
     foreach ($acts as $act) {
         $key = 'rollcall_' . $act['md5'] . '_list';
         if ($list = $cache->get($key)) {
             Library_File::write($act['md5'], $list);
         }
     }
     return true;
 }
Exemple #5
0
 /**
  * 获取 access_token
  * @param  string $appId     appID
  * @param  string $appSecret appSecret
  * @return string            access_token
  */
 public static function getJsTicket($appId, $appSecret)
 {
     $key = 'wechat_jsapi_ticket';
     $cache = Vera_Cache::getInstance();
     $ret = $cache->get($key);
     if ($cache->getResultCode() == Memcached::RES_SUCCESS) {
         return $ret;
     }
     $accessToken = self::getAccessToken($appId, $appSecret);
     $api = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi";
     $url = sprintf($api, $accessToken);
     $handle = curl_init();
     $options = array(CURLOPT_URL => $url, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1);
     curl_setopt_array($handle, $options);
     $content = curl_exec($handle);
     if (curl_errno($handle)) {
         //检查是否有误
         return false;
     }
     curl_close($handle);
     $content = json_decode($content, true);
     $cache->set($key, $content['ticket'], $content['expires_in'] - 60);
     //保险起见减去60秒
     return $content['ticket'];
 }
Exemple #6
0
 public function addUserToPushList($openid, $content, $time)
 {
     $cache = Vera_Cache::getInstance();
     $key = 'wechat_push_list';
     //单用户推送列表
 }
Exemple #7
0
 /**
  * 插入和修改活动信息
  * @param  int $owner   所有者学工号
  * @param  string $name    活动名称
  * @param  datatime $start   活动开始时间
  * @param  datatime $end     活动结束时间
  * @param  string $extra   附加信息
  * @param  string $md5     活动token
  * @return int          影响的行数
  */
 public static function setAct($owner, $name, $start, $end, $extra = '', $md5 = NULL)
 {
     if ($md5 == NULL) {
         //如果需要修改活动,务必携带活动token作为md5
         $md5 = md5($owner . $name . $start . $end);
     }
     $update = array('owner' => $owner, 'name' => $name, 'startTime' => $start, 'endTime' => $end, 'extra' => $extra);
     $insert = array_merge($update, array('md5' => $md5));
     $cache = Vera_Cache::getInstance();
     $key = 'rollcall_' . $md5 . '_info';
     $cache->set($key, $update, strtotime($update['endTime']) + 3600);
     //活动详情的缓存多保留一小时
     //利用MySQL特性 ON DUPLICATE KEY UPDATE,当违反md5的unique时,使用update
     //保证md5唯一并且自始至终都不变
     return $db->insert('rollcall_Board', $insert, NULL, $update);
 }