Heim  >  Artikel  >  WeChat-Applet  >  Die von WeChat entwickelte große Karussellfunktion

Die von WeChat entwickelte große Karussellfunktion

Y2J
Y2JOriginal
2017-05-08 11:13:463252Durchsuche

WeChat-Marketing ist ein neues Marketingmodell. Da WeChat der Interaktion zwischen Benutzern mehr Aufmerksamkeit schenkt, kann diese Art der Marketingförderung nicht blind die einfache Massenwerbe-Push-Methode des Weibo-Marketings anwenden. Diese Methode ist im WeChat-Marketing sehr ineffektiv und verärgert die Benutzer, die dann das öffentliche WeChat-Konto des Unternehmens oder Händlers kündigen. Für Unternehmen besteht ein wichtiger Aspekt der WeChat-Werbung darin, die Kommunikation zwischen Benutzern und öffentlichen Konten zu verbessern, und WeChat-Karussell ist eine der häufigsten Aktivitäten.

Das Folgende ist eine detaillierte Einführung:

1. Verwenden Sie

1. Erstellen Sie eine neue große Karussellaktivität:

Die von WeChat entwickelte große Karussellfunktion

2 . Auszeichnungseinstellung

Die von WeChat entwickelte große Karussellfunktion

3. Senden Sie nach dem Speichern eine „große Karussell“-Nachricht an das offizielle Konto in WeChat, und Sie erhalten den Inhalt des großen Karussells

Die von WeChat entwickelte große Karussellfunktion

4. Klicken Sie, um am großen Karussell-Event teilzunehmen, und klicken Sie dann in der Mitte auf „Zum Zeichnen klicken“:

Die von WeChat entwickelte große Karussellfunktion Die von WeChat entwickelte große Karussellfunktion

2. Implementierung

1.1 Front-End-Code

2.1 Back-End-Code
<% if (ErrLevel < 100)
   {
       Response.Write(ErrorInfo);
   }
   else if (ErrLevel == 101)
   {  //活动已结束,跳转到结束页面
%>
<script type="text/javascript">
    window.location.href = "end.aspx?wid="+<%=wid%>+"&aid="+<%=aid%>+"&openid="+<%=openid%>+";";
</script>
<%
   }
   else
   {  %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no;">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="format-detection" content="telephone=no">
    <meta name="description" content="微信">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <title>幸运大转盘抽奖</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript" src="../../scripts/jquery/jquery.query.js"></script>
    <script src="../../scripts/jquery/alert.js" type="text/javascript"></script>
    <link href="css/activity-style2.css" rel="stylesheet" type="text/css">
    <style>
        .activity-lottery-winning {
            background: url(Die von WeChat entwickelte große Karussellfunktions/beijing.gif) repeat scroll 0 0 #7E65AB;
            background-size: 120px auto;
            overflow: hidden;
        }
    </style>
</head>
<body class="activity-lottery-winning">
    <form id="form1" runat="server">
        <p class="main">

            <asp:HiddenField ID="hidStatus" runat="server" Value="" EnableViewState="false" />
            <asp:HiddenField ID="hidErrInfo" runat="server" EnableViewState="false" />
            <asp:HiddenField ID="hidAwardId" runat="server" EnableViewState="false" Value="0" />
            <p id="outercont">
                <p id="outer-cont">
                    <p id="outer">
                        <img  src="Die von WeChat entwickelte große Karussellfunktions/zp<%=picIndex % alt="Die von WeChat entwickelte große Karussellfunktion" >-.png">
                    </p>
                </p>
                <p id="inner-cont">
                    <p id="inner">
                        <img  src="Die von WeChat entwickelte große Karussellfunktions/activity-lottery-2.png" alt="Die von WeChat entwickelte große Karussellfunktion" >
                    </p>
                </p>
            </p>
            <p class="content">
                <p class="boxcontent boxwhite" id="zjl" style="display: none">
                    <p class="box">
                        <p class="title-orange"><span>恭喜你中奖了</span></p>
                        <p class="Detail">

                            <p>你中了:<span class="red" id="prizetype"><asp:Literal ID="litzjlJP" runat="server" EnableViewState="false" Text=""></asp:Literal></span></p>
                            <p>兑奖SN码:<span class="red" id="sncode"><asp:Literal ID="litzjlSN" runat="server" EnableViewState="false" Text=""></asp:Literal></span></p>
                            <p class="red">
                                <asp:Literal ID="litContentInfo" runat="server" EnableViewState="false"></asp:Literal>
                            </p>
                            <p>
                                <input name="" class="px" id="tel" value="" type="text" placeholder="用户请输入您的手机号">
                            </p>

                            <asp:Literal ID="litPwd" runat="server" EnableViewState="false" Text=""></asp:Literal>
                            <p>
                                <input class="pxbtn" name="提 交" id="save-btn" type="button" value="用户提交">
                            </p>
                        </p>
                    </p>
                </p>
                <p class="boxcontent boxwhite" id="result" style="display: none;">
                    <p class="box">
                        <p class="title-orange"><span>恭喜你中奖了</span></p>
                        <p class="Detail">
                            <p>你中了:<span class="red" id="jiangping"><asp:Literal ID="litJp" runat="server" EnableViewState="false" Text=""></asp:Literal></span></p>
                            <p>兑奖sn码为:<span class="red" id="jpsn"><asp:Literal ID="litSNM" runat="server" EnableViewState="false"></asp:Literal></span></p>
                            <p class="red">你已经兑奖成功,本SN码自定作废!</p>
                        </p>


                    </p>
                </p>



                <p class="boxcontent boxwhite">
                    <p class="box">
                        <p class="title-red"><span>奖项设置:</span></p>

                        <p class="Detail">
                            <asp:Literal ID="litOtherTip" runat="server" EnableViewState="false"></asp:Literal>
                            <asp:Literal ID="litJiangXing" runat="server" EnableViewState="false"></asp:Literal>
                        </p>
                    </p>
                </p>
                <p class="boxcontent boxwhite">
                    <p class="box">
                        <p class="title-red">活动说明:</p>
                        <p class="Detail">
                            <p class="red">
                                本次活动每天可以转
                            <asp:Literal ID="litdaysTimes" runat="server" EnableViewState="false"></asp:Literal>
                                次,总共可以转 
                            <asp:Literal ID="littotTimes" runat="server" EnableViewState="false"></asp:Literal>
                                次 你已经转了 <span id="zhuantimes">
                                    <asp:Literal ID="litHasUsedTimes" runat="server" EnableViewState="false"></asp:Literal></span> 次
                            </p>
                            <p>
                                <asp:Literal ID="litRemark" runat="server" EnableViewState="false"></asp:Literal>
                            </p>
                        </p>
                    </p>
                </p>
            </p>

        </p>


        <script type="text/javascript">
            var thisurl= document.URL;
            var wid = <%=wid%>;
            var aid =<%=aid%>;
            var status = $("#hidStatus").val();
            var showInfo = $("#hidErrInfo").val();
            var openid ="<%=openid%>";
            var jxname="";
            var jpname="";
            var cjtip="";
            var zhuantimes=parseInt( $("#zhuantimes").text());
             
            var zjl = false;//没中奖为false中奖为true 
            <% if (isZhJing)
               { %>
            $("#outercont").hide();
            $("#result").show();
               <%} %>
            if (status == "2") {
                $("#outercont").hide();

            }
            else if(status=="100")
            {
                $("#outercont").hide();
                $("#result").hide();
                $("#zjl").show();
            }


            $(function () {
                window.requestAnimFrame = (function () {
                    return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
                    function (callback) {
                        window.setTimeout(callback, 1000 / 60)
                    }
                })();
                var totalDeg = 360 * 3 + 0;
                var steps = [];
               
                var lostDeg = [360];
                var prizeDeg = <%=shuzu%>;
                var prize, sncode;
                var count = 0;
                var now = 0;
                var a = 0.01;
                var outter, inner, timer, running = false;
                function countSteps() {
                    var t = Math.sqrt(2 * totalDeg / a);
                    var v = a * t;
                    for (var i = 0; i < t; i++) {
                        steps.push((2 * v * i - a * i * i) / 2)
                    }
                    steps.push(totalDeg)
                }
                function step() {
                    // alert(&#39;rotate(&#39; + steps[now++] + &#39;deg)&#39;);
                    outter.style.webkitTransform = &#39;rotate(&#39; + steps[now++] + &#39;deg)&#39;;
                    outter.style.MozTransform = &#39;rotate(&#39; + steps[now++] + &#39;deg)&#39;;

                    if (now < steps.length) {
                        running = true;
                        requestAnimFrame(step)
                    } else {
                        running = false;
                        setTimeout(function () {
                            $("#zhuantimes").text(++zhuantimes);
                            if (zjl) {
                                $("#sncode").text(sncode);
                                $("#jpsn").text(sncode);
                                $("#jiangping").text(jxname+" "+jpname);
                                $("#prizetype").text(jxname+" "+jpname);
                                $("#zjl").slideToggle(500);
                                $("#outercont").slideUp(500)
                            }  
                            else
                            {
                                alert(cjtip);
                            }
                        },
                        200)
                    }
                }

                function start(deg) {

                    deg = deg || lostDeg[parseInt(lostDeg.length * Math.random())];
                    running = true;
                    clearInterval(timer);
                    totalDeg = 360 * 5 + deg;
                    steps = [];
                    now = 0;
                    countSteps();
                    requestAnimFrame(step)
                }
                window.start = start;
                outter = document.getElementById(&#39;outer&#39;);
                inner = document.getElementById(&#39;inner&#39;);
                i = 10;
                $("#inner").click(function () {
                    if (status == "2") {
                        alert(showInfo);
                    }
                    if (running) return;
                   
                    $.ajax({
                        url: "dzpAct.ashx",
                        dataType: "json",
                        data: {
                            openid: openid,
                            myact: "choujiang",
                            aid: aid,
                            wid:wid,
                            rad: Math.random()
                        },
                        beforeSend: function () {
                            running = true;
                            timer = setInterval(function () {
                                i += 5;
                              
                                outter.style.webkitTransform = &#39;rotate(&#39; + i + &#39;deg)&#39;;
                                outter.style.MozTransform = &#39;rotate(&#39; + i + &#39;deg)&#39;
                            },
                            1)
                        },
                        success: function (data) {
                            if (data.error == "sys" ||data.error == "nostart" ) {
                                cjtip=data.content;
                                count = 100;
                                clearInterval(timer);
                                return
                            }
                            else if(data.error=="notimes")
                            {
                                cjtip=data.content;
                                start();
                            }
                            else if (data.error=="succ") {
                                
                                zjl=true;
                                cjtip=data.content;
                                prize = data.sortid;
                                sncode = data.sn;
                                jpname=data.jpname;
                                jxname=data.jxname;
                                $("#hidAwardId").val(data.uid);
                                start(prizeDeg[data.sortid - 1])
                            }
                            
                            else {
                                cjtip=data.content;
                                start()
                            }
                            running = false;
                            count++
                        },
                        error: function () {

                            prize = null;
                            start();
                            running = false;
                            count++
                        },
                        timeout: 1000
                    })
                })
            });

            $("#save-btn").bind("click",
            function () {
                var btn = $(this);
              
                var tel = $("#tel").val();
                var pwd = "";
                var hidAwardId = $("#hidAwardId").val();
                if ($("#parssword").length>0 &&  $.trim($("#parssword").val()) == "") {
                    alert("请输入兑奖密码!");
                    return
                }

                if ($.trim(tel) == "") {
                    alert("请输入手机号!");
                    return
                }
                if($("#parssword").length>0){
                    pwd= $("#parssword").val();
                }
                var rad = Math.random();
                 
                var submitData = {
                    id: hidAwardId,
                    aid: aid,
                    pwd: pwd,
                    snumber:$("#sncode").text(),
                    tel: tel,
                    rad: rad,
                    openid:openid
                };
                 
                $.post(&#39;dzpAct.ashx?myact=update&#39;, submitData,
               function (data) {
                   if (data.success == "1") {
                       alert("提交成功!");
                       $("#result").slideToggle(500);
                       $("#zjl").slideToggle(500);
                       $("#outercont").slideUp(500);

                   } else {
                       alert(data.msg);
                   }
               },
               "json") 

            });

           
        </script>
        <script type="text/javascript">
            document.addEventListener(&#39;WeixinJSBridgeReady&#39;, function onBridgeReady() {
                window.shareData = {
                    "imgUrl": "",
                    "timeLineLink":  thisurl + "&is_share=1",
                    "sendFriendLink":  thisurl + "&is_share=1",
                    "weiboLink":  thisurl + "&is_share=1",
                    "tTitle": "<%=dzpAction.actName%>",
                    "tContent": "请关注后,再来抽奖。<%=dzpAction.brief%>",
                    "fTitle": "请关注后,再来抽奖。<%=dzpAction.actName%>",
                    "fContent": "请关注后,再来抽奖。<%=dzpAction.brief%>",
                    "wContent": "请关注后,再来抽奖。<%=dzpAction.brief%>"
                };
                // 发送给好友
                WeixinJSBridge.on(&#39;menu:share:appmessage&#39;, function (argv) {
                    WeixinJSBridge.invoke(&#39;sendAppMessage&#39;, {
                        "img_url": window.shareData.imgUrl,
                        "img_width": "640",
                        "img_height": "640",
                        "link": window.shareData.sendFriendLink,
                        "desc": window.shareData.fContent,
                        "title": window.shareData.fTitle
                    }, function (res) {
                        _report(&#39;send_msg&#39;, res.err_msg);
                    })
                });

                // 分享到朋友圈
                WeixinJSBridge.on(&#39;menu:share:timeline&#39;, function (argv) {
                    WeixinJSBridge.invoke(&#39;shareTimeline&#39;, {
                        "img_url": window.shareData.imgUrl,
                        "img_width": "640",
                        "img_height": "640",
                        "link": window.shareData.timeLineLink,
                        "desc": window.shareData.tContent,
                        "title": window.shareData.tTitle
                    }, function (res) {
                        _report(&#39;timeline&#39;, res.err_msg);
                    });
                });

                // 分享到微博
                WeixinJSBridge.on(&#39;menu:share:weibo&#39;, function (argv) {
                    WeixinJSBridge.invoke(&#39;shareWeibo&#39;, {
                        "content": window.shareData.wContent,
                        "url": window.shareData.weiboLink,
                    }, function (res) {
                        _report(&#39;weibo&#39;, res.err_msg);
                    });
                });
            }, false)
        </script>


    </form>
      <p style="display: none">©微布斯科技提供 qq 121285904 www.webus.cn</p>

</body>
</html>
<% }%>
/// <summary>
      /// ErrLevel:100表示正确无误,1表示严重错误,2表示业务方面有问题;3直接跳转到结束页面
      /// </summary>
      public int ErrLevel = 100;
      public string ErrorInfo = "";
      public  Model.wx_dzpActionInfo dzpAction;
      public int picIndex = 0;
      public int aid = 0;
      public int wid = 0;
      public bool isZhJing = false;
      public string openid = "";
      public string shuzu = "";
      BLL.wx_dzpAwardUser ubll = new BLL.wx_dzpAwardUser();
      BLL.wx_dzpUsersTemp utbll = new BLL.wx_dzpUsersTemp();
      BLL.wx_dzpActionInfo actBll = new BLL.wx_dzpActionInfo();
      BLL.wx_dzpAwardItem itemBll = new BLL.wx_dzpAwardItem();
 
      protected void Page_Load(object sender, EventArgs e)
      {
          OnlyWeiXinLook();
          aid = MyCommFun.RequestInt("aid", 0);
          wid = MyCommFun.RequestInt("wid", 0);
          openid = MyCommFun.RequestOpenid();
 
          if (aid == 0 || wid == 0 || openid.Trim() == "")
          {
              ErrLevel = 1;
              ErrorInfo = "访问参数错误!";
              return;
          }
          BindData();
      }
 
 
      private void BindData()
      {
          dzpAction = actBll.GetModel(aid);
          IList<Model.wx_dzpAwardItem> itemlist = itemBll.GetModelList("actId=" + aid);
          if (dzpAction == null || itemlist == null || itemlist.Count <= 0)
          {
              ErrLevel = 1;
              ErrorInfo = "未获得到数据";
              return;
          }
          this.Title = dzpAction.actName;
 
          if (dzpAction.endDate <= DateTime.Now)
          {   //说明活动已经结束
              ErrLevel = 101;
              ErrorInfo = "活动已结束";
              return;
          }
 
          StringBuilder sb = new StringBuilder("");
          Model.wx_dzpAwardItem item = new Model.wx_dzpAwardItem();
          int ttJpNum = 0;
          shuzu = "[";
          for (int i = 0; i < itemlist.Count; i++)
          {
              item = itemlist[i];
              sb.Append("<p>" + item.jxName + ":" + item.jpName + "  数量:" + item.jpNum + "</p>");
              ttJpNum += item.jpRealNum.Value;
              picIndex++;
              if (i < (itemlist.Count - 1))
              {
                  shuzu += item.jiaodu_min + ",";
              }
              else
              {
                  shuzu += item.jiaodu_min;
              }
          }
          shuzu += "]";
          litJiangXing.Text = sb.ToString();
          litRemark.Text = dzpAction.brief;
          litContentInfo.Text = dzpAction.contractInfo;
 
          littotTimes.Text = dzpAction.personMaxTimes == null ? "0" : dzpAction.personMaxTimes.Value.ToString();
          litdaysTimes.Text = dzpAction.dayMaxTimes == null ? "0" : dzpAction.dayMaxTimes.Value.ToString();
          if (dzpAction.djPwd.Trim().Length > 0)
          {
              litPwd.Text = "  <p>  <input name=\"\" class=\"px\" id=\"parssword\" type=\"password\" value=\"\" placeholder=\"商家输入兑奖密码\"></p>";
          }
          if (dzpAction.beginDate > DateTime.Now)
          {
              hidStatus.Value = "-2";
              ErrorInfo = hidErrInfo.Value = "活动尚未开始";
          }
          int hasCjTimes = utbll.getCJCiShu(aid, openid);//返回该用户的抽奖次数
          this.litHasUsedTimes.Text = hasCjTimes.ToString();
          int dayMaxTimes = dzpAction.dayMaxTimes == null ? 0 : dzpAction.dayMaxTimes.Value;
          int perMaxTimes = dzpAction.personMaxTimes == null ? 0 : dzpAction.personMaxTimes.Value;
          //判断是否中奖了
          Model.wx_dzpAwardUser award = ubll.getZJinfoByOpenid(aid, openid);
          if (award != null && award.id>0)
          {    //您中奖了
              if (award.uTel != null && award.uTel.ToString().Trim() != "")
              {//已经中奖,并且提交了
                  litJp.Text = "[" + award.jxName + "] " + award.jpName;
                  litSNM.Text = award.sn;
                  isZhJing = true;
              }
              else
              { //已经中奖,但是未提交
                  hidStatus.Value = "100";
                  litzjlJP.Text = "[" + award.jxName + "] " + award.jpName;
                  litzjlSN.Text = award.sn;
                  hidAwardId.Value = award.id.ToString();
                  litJp.Text = "[" + award.jxName + "] " + award.jpName;
                  litSNM.Text = award.sn;
              }
          }
          else
          {
              //判断每人最大抽奖次数,是否超过了
              if (hasCjTimes >= dzpAction.personMaxTimes)
              {
                hidStatus.Value = "2";
                //litOtherTip.Text = "<p class=&#39;red&#39;>您已经抽了" + hasCjTimes + "次了。</p>";
              }
              if (isTodayOverSum(dayMaxTimes))
              {
                  hidStatus.Value = "2";
                 // litOtherTip.Text = "<p class=&#39;red&#39;>每人每天只有" + dayMaxTimes.ToString() + "次抽奖机会,您已经使用完了。</p>";
              }
          }
      }
      #region 方法
      /// <summary>
      /// 判断今天是否已经超出抽奖次数
      /// todayTTTimes:能抽奖的总次数
      /// </summary>
      /// <param name="openid"></param>
      /// <param name="todayTTTimes">每天的抽奖总次数</param>
      /// <returns></returns>
      private bool isTodayOverSum( int todayTTTimes)
      {
          if (todayTTTimes <= 0)
          {
              return true;
          }
 
          DateTime todaybegin = DateTime.Parse(DateTime.Now.ToShortDateString());
          DateTime mingtianBegin = todaybegin.AddDays(1);
          if (!utbll.ExistsOpenid(" actId=" + aid + "  and  openid=&#39;" + openid + "&#39; and  createDate>=&#39;" + todaybegin + "&#39; and createDate<&#39;" + mingtianBegin + "&#39;"))
          {
              return false;
 
          }
 
          Model.wx_dzpUsersTemp model = utbll.getModelByAidOpenid(aid, openid);
          if (model.times >= todayTTTimes)
          {
              return true;
          }
          else
          {
              
              return false;
          }
 
      }
 
      #endregion
2. Implementierungslogik


[Verwandte Empfehlungen]
public class dzpAct : IHttpHandler
    {
        BLL.wx_dzpActionInfo actbll = new BLL.wx_dzpActionInfo();
        BLL.wx_dzpAwardUser ubll = new BLL.wx_dzpAwardUser();
        BLL.wx_dzpUsersTemp utbll = new BLL.wx_dzpUsersTemp();
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/json";
            string _action = MyCommFun.QueryString("myact");
            int aid = MyCommFun.RequestInt("aid");
            string openid = MyCommFun.RequestOpenid();  //得到微信用户的openid
            if (_action == "choujiang")
            {
                Dictionary<string, string> jsonDict = new Dictionary<string, string>();
                try
                {
                    //抽奖
                    Model.wx_dzpActionInfo dzpAction = new Model.wx_dzpActionInfo();
                  
                    BLL.wx_dzpAwardItem itemBll = new BLL.wx_dzpAwardItem();
                    #region 判断
                    int wid = MyCommFun.RequestInt("wid");
                    if (aid == 0 || wid == 0 || openid.Trim() == "")
                    {
                        jsonDict.Add("error", "sys");
                        jsonDict.Add("content", "参数错误!");
                        context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                        return;
                    }
                    dzpAction = actbll.GetModel(aid);
                    if (dzpAction == null)
                    {
                        jsonDict.Add("error", "sys");
                        jsonDict.Add("content", "参数错误!");
                        context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                        return;
                    }
                    if (dzpAction.endDate <= DateTime.Now)
                    { //说明活动已经结束
                        //非活动期间
                        jsonDict.Add("error", "end");
                        jsonDict.Add("content", "活动已结束");
                        context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                        return;
                    }
                    else if (dzpAction.beginDate > DateTime.Now)
                    {
                        //活动未开始
                        //非活动期间
                        jsonDict.Add("error", "nostart");
                        jsonDict.Add("content", "活动未开始");
                        context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                        return;
                    }
                    int dayMaxTimes = dzpAction.dayMaxTimes == null ? 0 : dzpAction.dayMaxTimes.Value;
                    int perMaxTimes = dzpAction.personMaxTimes == null ? 0 : dzpAction.personMaxTimes.Value;
                    //判断每人最大抽奖次数,是否超过了
                    if (personCJTimes(openid, aid) >= dzpAction.personMaxTimes)
                    {
                        jsonDict.Add("error", "notimes");
                        jsonDict.Add("content", "您已抽过奖了,欢迎下次再来!");
                        context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                        return;
                    }
                    if (isTodayOverSum(aid, openid, dayMaxTimes))
                    {
                        jsonDict.Add("error", "notimes");
                        jsonDict.Add("content", "每人每天只有" + dayMaxTimes.ToString() + "次抽奖机会。");
                        context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                        return;
                    }
                    Model.wx_dzpAwardUser award = ubll.getZJinfoByOpenid(aid, openid);
                    if (award != null)
                    {
                        //您中奖了
                        jsonDict.Add("error", "notimes");
                        jsonDict.Add("content", "您中奖了,欢迎下次再来!");
                        context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                        return;
                    }
                    #endregion
                    #region 计算中奖信息
                    /// 处理是否中奖
                    /// hidStatus 状态为-1:不能抽奖,直接跳转到end.aspx页面;
                    /// 0:抽奖次数超过设置的最高次数;
                    /// 1:还可以继续抽奖;
                    /// 2:中奖了;
                    List<Model.wx_dzpAwardItem> itemlist = itemBll.GetModelList("actId=" + aid);//该活动的所有奖项信息
                    int ttJpNum = 0;
                    for (int i = 0; i < itemlist.Count; i++)
                    {
                        ttJpNum += itemlist[i].jpRealNum.Value;
                    }
                    IList<Model.wx_dzpAwardUser> auserlist = ubll.getHasZJList(aid);//已经中奖的人列表
                    int ZhongJiangNum = 0;
                    if (auserlist != null)
                    {
                        ZhongJiangNum = auserlist.Count; //已经中奖的人数
                    }
                    int syZjNum = ttJpNum - ZhongJiangNum; //剩余的奖品数量
                    if (syZjNum <= 0)
                    {  //说明已经没有奖品了
                        jsonDict.Add("error", "-1");
                        jsonDict.Add("content", dzpAction.cfcjhf);
                        context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                        return;
                    }
                    dzpAction.personNum = MyCommFun.Obj2Int(dzpAction.personNum, 1);
                    dzpAction.personMaxTimes = MyCommFun.Obj2Int(dzpAction.personMaxTimes, 1);
                    int fenmo = dzpAction.personNum.Value * dzpAction.personMaxTimes.Value;
                    Random rd = new Random((int)DateTime.Now.Ticks);
                    int radNum = rd.Next(0, fenmo);//从0到fenmo里随机出一个值
                    if (radNum < syZjNum)
                    {
                        //中奖了,再从剩余奖品里抽取一个奖品
                        Model.wx_dzpAwardItem dajiang = getZJItem(itemlist, auserlist);
                        if (dajiang != null)
                        {
                            //这是中的中奖了
                            string snumber = Get_snumber(aid);
                            int uId = ubll.Add(aid, "", "", openid, dajiang.jxName, dajiang.jpName, snumber);
 
                            jsonDict.Add("error", "succ");
                            jsonDict.Add("content", "恭喜你中奖了!");
                            jsonDict.Add("sortid", dajiang.sort_id.Value.ToString());
                            jsonDict.Add("jxname", dajiang.jxName);
                            jsonDict.Add("jpname", dajiang.jpName);
                            jsonDict.Add("uid", uId.ToString());
                            jsonDict.Add("sn", snumber);
                            context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                            return;
                        }
                        else
                        {
                            //奖品已经全部中完了
                            jsonDict.Add("error", "-1");
                            jsonDict.Add("content", dzpAction.cfcjhf);
                            context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                            return;
                        }
                    }
                    else
                    {
                        //这个条件说明:未中奖
                        //抛出未中奖的数据
 
                        jsonDict.Add("error", "-1");
                        jsonDict.Add("content", dzpAction.cfcjhf);
                        context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                        return;
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    jsonDict.Add("error", "sys");
                    jsonDict.Add("content", "计算抽奖出现未知错误,请联系管理员!");
                    context.Response.Write(MyCommFun.getJsonStr(jsonDict));
                    return;
                }
            }
            else if (_action == "update")
            {
                try
                {
                    #region 提交手机
                    /// 提交手机号码
                    string tel = MyCommFun.QueryString("tel");
                    string pwd = MyCommFun.QueryString("pwd");
                    string snumber = MyCommFun.QueryString("snumber");
                    int id = MyCommFun.RequestInt("id");
 
                    if (aid == 0 || id == 0 || snumber == "" || tel == "")
                    {
                        context.Response.Write("{\"msg\":\"提交出现异常!!\",\"success\":\"0\"}");
                        return;
                    }
 
                    if ((pwd.Length>0) &&( !actbll.ExistsPwd(aid, pwd)))
                    {
                        context.Response.Write("{\"msg\":\"商家兑换密码错误!!\",\"success\":\"0\"}");
                        return;
                    }
                    BLL.wx_dzpAwardUser ubll = new BLL.wx_dzpAwardUser();
                    Model.wx_dzpAwardUser model = ubll.GetModel(id);
                    if (model == null)
                    {
                        context.Response.Write("{\"msg\":\"提交出现异常2!!\",\"success\":\"0\"}");
                        return;
                    }
                    model.uTel = tel;
                    if (pwd.Length > 0)
                    {
                        model.hasLingQu = true;
                    }
                    else
                    {
                        model.hasLingQu = false;
                    }
                    ubll.Update(model);
 
                    context.Response.Write("{\"msg\":\"提交成功!\",\"success\":\"1\"}");
                    return;
                    #endregion
                }
                catch
                {
                    context.Response.Write("{\"msg\":\"提交出现异常!!\",\"success\":\"0\"}");
 
                    return;
                }
            }
        }
        #region 方法
        /// <summary>
        /// 取中奖的项目
        /// </summary>
        /// <param name="itemlist">所有的奖品信息</param>
        /// <param name="haszjlist">已经中奖的列表</param>
        /// <returns></returns>
        private Model.wx_dzpAwardItem getZJItem(IList<Model.wx_dzpAwardItem> itemlist, IList<Model.wx_dzpAwardUser> haszjlist)
        {
            IList<Model.wx_dzpAwardItem> zjItemlist = new List<Model.wx_dzpAwardItem>();//剩余奖品列表
            Model.wx_dzpAwardItem tmpItem = new Model.wx_dzpAwardItem();
            Model.wx_dzpAwardItem stmpItem = new Model.wx_dzpAwardItem();
            IList<Model.wx_dzpAwardUser> thiszjRs;
            for (int i = 0; i < itemlist.Count; i++)
            {
                tmpItem = itemlist[i];
                thiszjRs = (from user in haszjlist where user.jpName == tmpItem.jpName && user.jxName == tmpItem.jxName select user).ToArray<Model.wx_dzpAwardUser>();
                int tmpSYNum = 0;
                if (thiszjRs != null)
                {
                    tmpSYNum = MyCommFun.Obj2Int(tmpItem.jpRealNum) - thiszjRs.Count;
                }
                if (tmpSYNum <= 0)
                {
                    continue;
                }
                for (int j = 0; j < tmpSYNum; j++)
                {
                    stmpItem = new Model.wx_dzpAwardItem();
                    stmpItem.jpName = tmpItem.jpName;
                    stmpItem.jxName = tmpItem.jxName;
                    stmpItem.sort_id = tmpItem.sort_id;
                    zjItemlist.Add(stmpItem);
                }
            }
            Random rd = new Random((int)DateTime.Now.Ticks);
            int jpIndex = rd.Next(0, zjItemlist.Count);//从0到zjItemlist.Count里随机出一个值
            return zjItemlist[jpIndex];
        }
        /// <summary>
        /// 判断该用户的抽奖次数
        /// </summary>
        /// <param name="openid"></param>
        /// <returns></returns>
        private int personCJTimes(string openid, int aid)
        {
            int times = 0;
            times = utbll.GetRecordCount("actId=" + aid + " and openid=&#39;" + openid + "&#39;");
            return times;
        }
        /// <summary>
        /// 判断今天是否已经超出抽奖次数
        /// todayTTTimes:能抽奖的总次数
        /// </summary>
        /// <param name="openid"></param>
        /// <param name="todayTTTimes">每天的抽奖总次数</param>
        /// <returns></returns>
        private bool isTodayOverSum(int aid, string openid, int todayTTTimes)
        {
            if (todayTTTimes <= 0)
            {
                return true;
            }
            Model.wx_dzpUsersTemp model = new Model.wx_dzpUsersTemp();
            model.openid = openid;
            DateTime todaybegin = DateTime.Parse(DateTime.Now.ToShortDateString());
            DateTime mingtianBegin = todaybegin.AddDays(1);
            if (!utbll.ExistsOpenid(" actId=" + aid + "  and  openid=&#39;" + openid + "&#39; and  createDate>=&#39;" + todaybegin + "&#39; and createDate<&#39;" + mingtianBegin + "&#39;"))
            { //第一次,插入
                model.times = 1;
                model.createDate = DateTime.Now;
                model.openid = openid;
                model.actId = aid;
                utbll.Add(model);
                return false;
            }
            model = utbll.getModelByAidOpenid(aid, openid);
            if (model.times >= todayTTTimes)
            {
                return true;
            }
            else
            {
                model.times += 1;
                utbll.Update(model);
                return false;
            }
        }
        /// <summary>
        /// 返回中奖序列号
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public string Get_snumber(int aid)
        {
            Random rd = new Random((int)DateTime.Now.Ticks);
            int radNum = rd.Next(0, 9);//从0到9里随机出一个值
 
            return "SNdzp" + aid + "_" + MyCommFun.ConvertDateTimeInt(DateTime.Now) + radNum;
        }
        #endregion
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

1.

Download des Quellcodes der WeChat-Plattform für öffentliche Konten


2.

Quellcode des Ali-Unterordnungssystems

Das obige ist der detaillierte Inhalt vonDie von WeChat entwickelte große Karussellfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn