微信摇一摇抽奖活动 微信摇奖

微信开发摇一摇抽奖活动,基于场景二维码进行多店面的区分,场景二维码放置于不同店面中,用户扫码关注或直接进入公众号,弹出活动连接(非此场景二维码进入的用户无法查看连接),点击连接进入页面,摇奖。(奖项基于数量和中奖率进行设置)代码放置于百度bae平台。

基本流程:
1.微信扫码关注,获取活动链接

基础代码如下:

//接收事件消息
    private function receiveEvent($object)
    {
        // global $weixin;
        $openid = $object->FromUserName;
        $content = "";
        switch ($object->Event)
        {
            //区分来源,推送不同信息
            case "subscribe":
                $content = "关注花容月貌化妆品,拥有花容月貌容颜!";
                // $content .= (!empty($object->EventKey))?("\n来自二维码场景 ".str_replace("qrscene_","",$object->EventKey)):"";
                if(!empty($object->EventKey)){
                    //写入店面id
                    $shopid = str_replace("qrscene_","",$object->EventKey);
                    //数据库积分
                    include "./credits.php";
                    //是否重复关注
                    if(is_join($openid)){
                        $content .= "您已经参与过抽奖活动啦!每人只有一次摇奖机会哦!";
                    }else{
                        //问题:老用户同时需要写入数据库 获取二维码时写入
                        add_user($openid,$shopid);
                        $content .= "摇一摇,赢大奖! <a href='http://icecry.duapp.com/h5/index.php?openid=".$openid."&shopid=".$shopid."'>点击参与</a>";
                    }
                }
                break;
            case "unsubscribe":
                $content = "您已取消关注!";
                break;
            case "SCAN":
                $shopid = str_replace("qrscene_","",$object->EventKey);
                //此处直接返回是否参与活动,如果未参与返回链接
                include "./credits.php";
                //是否重复关注 是否关注后未抽奖
                $content = is_join($openid);
                if(is_join($openid)){
                    $content = "您已经参与过抽奖活动啦!每人只有一次摇奖机会哦!";
                }else{
                    //考虑已经关注的用户,写入数据库
                    add_user($openid, $shopid);
                    $content = "摇一摇,赢大奖! <a href='http://icecry.duapp.com/h5/index.php?openid=".$openid."&shopid=".$shopid."'>点击参与</a>";
                }
                //要实现统计分析,则需要扫描事件写入数据库,这里可以记录 EventKey及用户OpenID,扫描时间
                break;
            case "CLICK":
                switch ($object->EventKey)
                {
                    case "kefu":
                        $content = "您好,花容月貌6号客服为您服务!";
                        break;
                }
                break;
            default:
                // $content = "receive a new event: ".$object->Event;
                $content = "未知的消息类型,请直接联系我们的在线客服。";
                break;
        }
        if(is_array($content)){
            if (isset($content[0])){
                $result = $this->transmitNews($object, $content);
            }else if (isset($content['MusicUrl'])){
                $result = $this->transmitMusic($object, $content);
            }
        }else{
            $result = $this->transmitText($object, $content);
        }

        return $result;
    }

credits.php文件用于检测用户是否已参与,并提供新用户写入数据库的方法

微信摇一摇代码:

if(window.DeviceMotionEvent){
  window.addEventListener('devicemotion',deviceMotionHandler, false);  
}else{
    alert('呃~ 您的手机太古老了,换个手机试试吧!');
}

    
var SHAKE_THRESHOLD = 500;  
var last_update = 0;  
var x, y, z, last_x, last_y, last_z;  
   
function deviceMotionHandler(eventData){
  var acceleration =eventData.accelerationIncludingGravity;  
  //alert(newDate().getTime());
  var curTime = new Date().getTime();  

  // alert(curTime - last_update);
  if ((curTime - last_update)> 300) {

    var diffTime = curTime -last_update;  
    last_update = curTime;  
   
    x = acceleration.x;  
    y = acceleration.y;  
    z = acceleration.z;    
   
    var speed = Math.abs(x +y + z - last_x - last_y - last_z) / diffTime * 10000;  

    if (speed > SHAKE_THRESHOLD) {
        // 摇一摇执行播放那个函数
      playVid();
      var openid = document.getElementById("openid").value;
      var shopid = document.getElementById("shopid").value;
      window.location.href = 'prize.php?openid='+openid+'&shopid='+shopid;
    }  
    last_x = x;
    last_y = y;
    last_z = z;
  }  
}

function playVid()
{
    $(document).on('touchstart', function() {
        myVideo.load()
    })
  var myVideo = document.getElementById("video1");
  myVideo.play();
}

摇动手机后,根据设置的判断条件进行跳转,并在新的页面中配置奖项和摇奖函数(注意页面的传递务必添加openid等参数)

中奖函数:

function get_rand($proArr) { 
  $result = ''; 
  //概率数组的总概率精度
  $proSum = array_sum($proArr); 
  //概率数组循环
  foreach ($proArr as $key => $proCur) { 
    $randNum = mt_rand(1, $proSum); 
    if ($randNum <= $proCur){
      $result = $key; 
      break; 
    }else{ 
      $proSum -= $proCur; 
    }
  } 
  unset ($proArr); 
  return $result; 
}

依据数据库返回结果,对已抽完的奖项进行unset,防止再次中奖
奖项配置:

$prize_arr = array( 
    '0' => array('id'=>1,'prize'=>'一等奖:手机','pic'=>'images/prize1.jpg','v'=>0),
    '1' => array('id'=>2,'prize'=>'二等奖:','pic'=>'images/prize2.jpg','v'=>5),
    '2' => array('id'=>3,'prize'=>'三等奖:','pic'=>'images/prize3.jpg','v'=>10),
    '3' => array('id'=>4,'prize'=>'四等奖:','pic'=>'images/prize4.jpg','v'=>20),
    '4' => array('id'=>5,'prize'=>'未抽中','pic'=>'images/noprize.jpg','v'=>65),
);

v为中奖概率,总和为100,即1的中奖概率为5%

各流程注意判断用户是否已参与抽奖,如果参与直接跳转到result.php展示中奖结果即可。

代码下载:微信摇一摇抽奖活动代码.rar

Tags: 微信

仅有一条评论

  1. 非扫码用户无法通过分享进入活动,也可以考虑使用js来隐藏右上角分享按钮。

添加新评论