您的位置:首页 > 编程语言 > PHP开发

PHP 邀请码类

2015-07-30 09:37 260 查看
<?php
class 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'] < self::WAIT_TIME && ! empty(
$lastCode)) {
$msg = "生成间隔时间不能少于" . self::WAIT_TIME . "秒";
return array('status' => 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'] < 0) {
$msg = $this->_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 < self::CODE_LENGTH; $i ++) {
$code .= $str{rand(0, 33)};
}
//检查是否重复
$isexsit = InvitationCodeModel::instance()->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__);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: