欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

邀请码的设计

程序员文章站 2022-05-28 16:59:28
...

无详细内容 无 ?phpclass InvitationCodeService{ const CODE_LENGTH = 4; const WAIT_TIME = 10; //生成邀请码的间隔时间 const TIME_OUT = 3600; //半个小时 private $_obj = 1; //多个项目的情况下 private $_num = 100; private $_status = array(0 = "未

 "未激活", 1 => "激活的", - 1 => "已过期");
    public function crateCode ($uid)
    {
        $lastCode = InvitationCodeModel::instance()->getCodeByUid($uid);
        if (time() - $lastCode['create_time']  false, 'message' => $msg);
        }
        $code = $this->getRandCode();
        $params = array('uid' => $uid, 'create_time' => time(), 
        'obj' => $this->_obj, 'code' => $code);
        $rs = InvitationCodeModel::instance()->addCode($params);
        if ($rs > 0) {
            return array('status' => true, 'data' => $code, 'message' => "生成成功");
        } else {
            return array('status' => false, 'data' => $code, 
            'message' => "生成失败");
        }
    }
    //激活码
    public function activate ($sendee, $code)
    {
        
        $code = InvitationCodeModel::instance()->getCodeByCode($code);
        if (empty($code)) {
            return array('status' => false, 'message' => "授权码错误!");
        }
        if ($code['status'] _status[$code['status']];
            return array('status' => false, 'message' => $msg);
        }
        if ($code['status'] == 1 && $code['sendee'] != $sendee) {
            return array('status' => false, 'message' => "此邀请码已被使用");
        }
        if ($code['status'] == 1 && $code['sendee'] == $sendee) {
            $istimeout = $this->isTimeout($code);
            if (! $istimeout['status']) {
                return $istimeout;
            }
            return array('status' => true);
        }
        $v = array('sendee' => $sendee, 'status' => 1, 'active_time' => time());
        $rs = InvitationCodeModel::instance()->saveCodeById($v, $code['id']);
        if ($rs > 0) {
            return array('status' => true, 'data' => $code, 'message' => "激活成功");
        } else {
            return array('status' => false, 'data' => $code, 
            'message' => "激活失败");
        }
    }
    private function isTimeout ($code)
    {
        if (time() - $code['active_time'] > self::TIME_OUT) {
            $v = array('status' => - 1);
            InvitationCodeModel::instance()->saveCodeById($v, $code['id']);
            return array('status' => false, 'message' => "授权码已失效,请重新获取授权!");
        }
        return array('status' => true);
    }
    //检查是否授权
    public function authrize ($sendee)
    {
        $code = InvitationCodeModel::instance()->getCodeBySendee($sendee);
        if (empty($code)) {
            return array('status' => false, 'message' => "未被授权进入");
        }
        if ($code['status'] == - 1) {
            return array('satatus' => false, 'message' => "授权码已失效,请重新获取授权!");
        }
        if (time() - $code['active_time'] > self::TIME_OUT) {
            $v = array('status' => - 1);
            InvitationCodeModel::instance()->saveCodeById($v, $code['id']);
            return array('status' => false, 'message' => "授权码已失效,请重新获取授权!");
        }
        $data = self::TIME_OUT - (time() - $code['active_time']);
        return array('status' => true, 'data' => $data);
    }
    //生成随机数
    private function getRandCode ()
    {
        $str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXXYZ';
        $code = "";
        for ($i = 0; $i getCodeByCode($code);
        if (! empty($isexsit)) {
            return $this->getRandCode();
        }
        return $code;
    }
    public function getCodePage ($p, $uid)
    {
        $where = array('uid' => $uid);
        $rs = InvitationCodeModel::instance()->getCodePage($p, $this->_num, 
        $where);
        $member = new MemberService();
        foreach ($rs as $k => $v) {
            $user = $member->getMemberByUid($v['sendee']);
            $rs[$k]['sendee'] = $user['real_name'];
            $rs[$k]['status'] = $this->_status[$v['status']];
        }
        return $rs;
    }
}
class InvitationCodeModel extends Db
{
    private $_code = 'd_invitation_code';
    public function getCodePage ($start, $num, $where)
    {
        return $this->getPage($start, $num, $this->_code, null, $where, 
        'id DESC');
    }
    public function addCode ($params)
    {
        return $this->add($this->_code, $params);
    }
    public function saveCodeById ($v, $id)
    {
        return $this->update($this->_code, $v, array('id' => $id));
    }
    public function getCodeByCode ($code)
    {
        return $this->getOne($this->_code, array('code' => $code));
    }
    public function getCodeByUid ($uid)
    {
        $sql = "SELECT * FROM $this->_code WHERE uid=$uid AND status=0 ORDER BY id DESC LIMIT 1";
        return $this->fetch($sql);
    }
    public function getCodeBySendee ($sendee)
    {
        $sql = "SELECT * FROM $this->_code WHERE sendee=$sendee AND status=1 ORDER BY id DESC LIMIT 1";
        return $this->fetch($sql);
    }
    /**
     * 
     * @return InvitationCodeModel
     */
    public static function instance ()
    {
        return parent::_instance(__CLASS__);
    }
}