基于微信抽奖

基于微信抽奖

作者:admin |  时间:2015-06-25 |  浏览:423 |  1 条评论

活动过程中抽奖系统设计 一文讲了抽奖系统设计问题,本文在此基础上,结合微信,谈一谈如何基于微信抽奖。

 

 

基于微信抽奖,可以让用户抽奖的同时关注商家的微信。另外,用户发送上行信息,微信的客服接口允许商家在48小时内向用户微信发送信息,更好的提高粘性。

 

1. 建立多个code库如5位、6位等,对应不同的业务。code库要足够大,保证随机。

2. 用户根据不同业务请求获取code,服务端记录<code,uid>uid是用户在商家系统的账户id。每个code限时3个小时,如果超过三个小时未使用,删除记录<code,uid> code重新返回code库中。

3. 用户拿到code,登录微信,关注商家账户后,在微信中输入code:uid,微信服务端将用户输入发送到业务服务端,业务服务端验证code:uid合法性,如果合法,服务端记录<wxid,uid>,同时进入抽奖系统抽奖,返回抽奖结果。每个用户限三次机会输入code:uid,超过三次,wxid将被记入黑名单。

4. 商家可以根据<wxid,uid>在48个小时内与用户互动。

 

生成code库伪代码:

$letter = array("B", "F", "P", "Q", "R", "T", "U", "V", "W", "0", "3", "6", "9");

$key = "qp_code_set_7";

foreach($letter as $v1) {
	foreach($letter as $v2) {
        foreach($letter as $v3) {
            foreach($letter as $v4) {
                foreach ($letter as $v5) {
                    foreach ($letter as $v6) {
                       foreach($letter as $v7) {
                           $code = $v1.$v2.$v3.$v4.$v5.$v6.$v7;
                           $redis->sAdd($key, $code);  //$redis->sPop()可以随机取出
                       }
                    }
                }
            }
        }
	}
}

 

微信服务器和业务服务器交互伪代码:

public function onText() {
	$c = $this->getRequest('content'); //从微信获取用户输入内容 code:uid
	$wxid = $this->username;  //用户微信id
	$reply = null;
	$curtime = time();
	if(preg_match("/^[a-z0-9]{4,5}:\d+$/i", $c)) {  //业务1
		$code = strtoupper($c);
		$uid = $this->redis->hGet($this->k_code_uid, $code);  //根据code和账户id建立的关系,取出账号id
		if(!empty($username)) {
			if($this->redis->incr("ontextlock{$code}") == 1){
				$r = $this->redis->hSet($this->k_uid_wx, $uid, $wxid);  //建立微信和账户id的对应关系
				if($r) {
					...
					$this->codeRecycle($code, $uid, $this->k_code); //code回收,重新进入code库中,下次可以继续使用
					...
					$reply = $this->drawShow();  //抽奖
					...
				}
				$this->redis->delete("ontextlock{$code}");
			}
		}
	} else if(preg_match("/^[a-z0-9]{6}:\d+$/i", $c)) { //业务2
		$code = strtoupper($c);
		$uid = $this->redis->hGet($this->k_code_uid, $code);
		if(!empty($uid)) {
			...
		}
	}

    ...
	
	$this->output($reply);
}

相关推荐

  1. yameimei 2015-7-13 07:35 #1 回复TA

    拜读一下,哈哈

yameimei进行回复 取消回复

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>