WeChat이 개발한 대형 캐러셀 기능
위챗 마케팅은 새로운 마케팅 모델입니다. 위챗은 사용자 간의 상호 작용에 더 많은 관심을 기울이기 때문에 이러한 종류의 마케팅 프로모션은 웨이보 마케팅의 단순한 대량 광고 푸시 방식을 맹목적으로 적용할 수 없습니다. 이 방법은 WeChat 마케팅에 매우 효과적이지 않으며 사용자를 혐오하게 만들고 회사 또는 판매자의 WeChat 공개 계정을 취소하게 됩니다. 기업의 경우 WeChat 프로모션의 중요한 측면은 사용자와 공개 계정 간의 점도를 개선하는 것이며 WeChat Carousel은 가장 일반적인 활동 중 하나입니다.
다음은 자세한 소개입니다.
1.
을 사용하세요. 1. 새로운 대형 캐러셀 활동을 만듭니다.
2. 어워드 설정
3. 저장 후 위챗 공식 계정으로 '빅 캐러셀' 메시지를 보내면 빅 캐러셀의 내용을 받아볼 수 있습니다.
4. 클릭하여 대형 회전목마 이벤트에 입장한 후 가운데에 있는 "그리기 클릭"을 클릭하세요.
2. 구현
1. 페이지
1.1 프론트엔드 코드
<% 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(WeChat이 개발한 대형 캐러셀 기능s/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="WeChat이 개발한 대형 캐러셀 기능s/zp<%=picIndex % alt="WeChat이 개발한 대형 캐러셀 기능" >-.png"> </p> </p> <p id="inner-cont"> <p id="inner"> <img src="WeChat이 개발한 대형 캐러셀 기능s/activity-lottery-2.png" alt="WeChat이 개발한 대형 캐러셀 기능" > </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('rotate(' + steps[now++] + 'deg)'); outter.style.webkitTransform = 'rotate(' + steps[now++] + 'deg)'; outter.style.MozTransform = 'rotate(' + steps[now++] + 'deg)'; 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('outer'); inner = document.getElementById('inner'); 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 = 'rotate(' + i + 'deg)'; outter.style.MozTransform = 'rotate(' + i + 'deg)' }, 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('dzpAct.ashx?myact=update', 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('WeixinJSBridgeReady', 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('menu:share:appmessage', function (argv) { WeixinJSBridge.invoke('sendAppMessage', { "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('send_msg', res.err_msg); }) }); // 分享到朋友圈 WeixinJSBridge.on('menu:share:timeline', function (argv) { WeixinJSBridge.invoke('shareTimeline', { "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('timeline', res.err_msg); }); }); // 分享到微博 WeixinJSBridge.on('menu:share:weibo', function (argv) { WeixinJSBridge.invoke('shareWeibo', { "content": window.shareData.wContent, "url": window.shareData.weiboLink, }, function (res) { _report('weibo', res.err_msg); }); }); }, false) </script> </form> <p style="display: none">©微布斯科技提供 qq 121285904 www.webus.cn</p> </body> </html> <% }%>
2.1 백엔드 코드
/// <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='red'>您已经抽了" + hasCjTimes + "次了。</p>"; } if (isTodayOverSum(dayMaxTimes)) { hidStatus.Value = "2"; // litOtherTip.Text = "<p class='red'>每人每天只有" + 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='" + openid + "' and createDate>='" + todaybegin + "' and createDate<'" + mingtianBegin + "'")) { return false; } Model.wx_dzpUsersTemp model = utbll.getModelByAidOpenid(aid, openid); if (model.times >= todayTTTimes) { return true; } else { return false; } } #endregion
2. 구현 로직
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='" + openid + "'"); 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='" + openid + "' and createDate>='" + todaybegin + "' and createDate<'" + mingtianBegin + "'")) { //第一次,插入 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; } } }
【관련 추천】
위 내용은 WeChat이 개발한 대형 캐러셀 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP는 웹 개발 및 서버 측 프로그래밍, 특히 WeChat 개발에 널리 사용되는 오픈 소스 스크립팅 언어입니다. 오늘날 점점 더 많은 회사와 개발자가 WeChat 개발에 PHP를 사용하기 시작하고 있습니다. PHP는 배우기 쉽고 사용하기 쉬운 개발 언어이기 때문입니다. WeChat 개발에서 메시지 암호화 및 복호화는 데이터 보안과 관련되어 있기 때문에 매우 중요한 문제입니다. 암호화 및 복호화 방법이 없는 메시지의 경우 해커가 쉽게 데이터를 획득할 수 있어 사용자에게 위협이 될 수 있습니다.

오늘날 디지털 시대의 기업 마케팅에서는 인터랙티브 마케팅 활동이 널리 활용되고 있으며, 그 중 사용자의 관심과 참여를 유도하기 위해 대형 캐러셀 추첨이 활용되는 경우가 많습니다. H5와 PHP 기술을 결합하면 복권의 재미와 실시간 특성을 향상시킬 수 있을 뿐만 아니라 사용자 참여와 상호작용성을 향상시켜 기업 브랜드 마케팅에 더 많은 기회를 제공할 수 있습니다. 이 기사에서는 H5 및 PHP 기술을 사용하여 창의적인 큰 바퀴 복권을 만드는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 추첨 이벤트의 프론트 엔드 디자인을 먼저,

WeChat의 인기로 인해 점점 더 많은 기업이 WeChat을 마케팅 도구로 사용하기 시작했습니다. WeChat 그룹 메시징 기능은 기업이 WeChat 마케팅을 수행하는 중요한 수단 중 하나입니다. 그러나 수동 전송에만 의존한다면 마케팅 담당자에게는 매우 시간이 많이 걸리고 힘든 작업입니다. 따라서 WeChat 대량 메시징 도구를 개발하는 것이 특히 중요합니다. 이 기사에서는 PHP를 사용하여 WeChat 대량 메시징 도구를 개발하는 방법을 소개합니다. 1. 준비 작업 WeChat 대량 메시징 도구를 개발하려면 다음 기술 사항을 숙지해야 합니다. PHP WeChat 공개 플랫폼 개발에 대한 기본 지식 개발 도구: Sub

WeChat 공개 계정 개발에서 사용자 태그 관리는 개발자가 사용자를 더 잘 이해하고 관리할 수 있도록 하는 매우 중요한 기능입니다. 이 기사에서는 PHP를 사용하여 WeChat 사용자 태그 관리 기능을 구현하는 방법을 소개합니다. 1. WeChat 사용자의 openid를 획득합니다. WeChat 사용자 태그 관리 기능을 사용하기 전에 먼저 사용자의 openid를 획득해야 합니다. WeChat 공개 계정을 개발할 때 사용자 인증을 통해 openid를 얻는 것이 일반적인 관행입니다. 사용자 인증이 완료되면 다음 코드를 통해 사용자를 얻을 수 있습니다.

WeChat이 사람들의 삶에서 점점 더 중요한 커뮤니케이션 도구가 되면서, WeChat의 민첩한 메시징 기능은 많은 기업과 개인의 선호를 빠르게 받고 있습니다. 기업의 경우 WeChat을 마케팅 플랫폼으로 개발하는 것이 하나의 추세가 되었으며 WeChat 개발의 중요성은 점차 더욱 부각되고 있습니다. 그 중 그룹 전송 기능이 더욱 널리 사용됩니다. 그렇다면 PHP 프로그래머로서 그룹 메시지 전송 기록을 어떻게 구현해야 할까요? 다음은 간략한 소개입니다. 1. WeChat 공개 계정과 관련된 개발 지식을 이해합니다. 그룹 메시지 전송 기록을 구현하는 방법을 이해합니다.

WeChat은 현재 세계에서 가장 큰 사용자 기반을 보유한 소셜 플랫폼 중 하나입니다. 모바일 인터넷의 인기로 인해 점점 더 많은 기업들이 WeChat 마케팅의 중요성을 깨닫기 시작했습니다. WeChat 마케팅을 수행할 때 고객 서비스는 중요한 부분입니다. 고객 서비스 채팅 창을 더 잘 관리하기 위해 WeChat 개발에 PHP 언어를 사용할 수 있습니다. 1. PHP 소개 WeChat 개발 PHP는 웹 개발 분야에서 널리 사용되는 오픈 소스 서버 측 스크립팅 언어입니다. WeChat 공개 플랫폼에서 제공하는 개발 인터페이스와 결합하여 PHP 언어를 사용하여 WeChat을 수행할 수 있습니다.

모바일 인터넷의 인기로 인해 점점 더 많은 사람들이 WeChat을 소셜 소프트웨어로 사용하고 있으며 WeChat 개방형 플랫폼은 개발자에게도 많은 기회를 제공합니다. 최근 인공지능 기술의 발전과 함께 음성인식 기술은 점차 모바일 단말기 개발에 있어서 대중적인 기술 중 하나로 자리잡고 있다. WeChat 개발에서 음성 인식을 구현하는 방법은 많은 개발자의 관심사가 되었습니다. 이 기사에서는 PHP를 사용하여 음성 인식 기능을 구현하는 WeChat 애플리케이션을 개발하는 방법을 소개합니다. 1. 음성인식의 원리 음성인식 구현 방법을 소개하기 전에 먼저 언어에 대한 이해를 해보자.

WeChat 공개 계정을 개발할 때 투표 기능이 자주 사용됩니다. 투표 기능은 사용자들이 상호 작용에 빠르게 참여할 수 있는 좋은 방법이며, 이벤트 개최 및 의견 조사를 위한 중요한 도구이기도 합니다. 이 기사에서는 PHP를 사용하여 WeChat 투표 기능을 구현하는 방법을 소개합니다. WeChat 공식 계정 승인을 받으려면 먼저 WeChat 공식 계정 승인을 받아야 합니다. WeChat 공개 플랫폼에서는 WeChat 공개 계정, 공식 계정 및 공개 계정에 해당하는 토큰의 API 주소를 구성해야 합니다. PHP 언어를 사용하여 개발하는 과정에서 WeChat에서 공식적으로 제공하는 PH를 사용해야 합니다.
