微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式。这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公众账号关注。对于企业来说,做微信推广重要的一个方面就是提高用户和公众账号之间的黏度,而微信大转盘就是其中最为常见的活动。
下面详细介绍:
一、使用
1. 新建一个大转盘的活动:
2. 奖项设置
3. 保存后,在微信里给公众号发一个“大转盘”的消息, 就会收到大转盘的内容
4. 点击进入大转盘活动,然后点击中间的 “点击抽奖”:
二、实现
1. 页面
1.1 前台代码
2.1 后台代码
///
/// ErrLevel:100表示正确无误,1表示严重错误,2表示业务方面有问题;3直接跳转到结束页面
///
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 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("
" + item.jxName + ":" + item.jpName + " 数量:" + item.jpNum + "
");
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 = "
";
}
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 = "
您已经抽了" + hasCjTimes + "次了。
";
}
if (isTodayOverSum(dayMaxTimes))
{
hidStatus.Value = "2";
// litOtherTip.Text = "
每人每天只有" + dayMaxTimes.ToString() + "次抽奖机会,您已经使用完了。
";
}
}
}
#region 方法
///
/// 判断今天是否已经超出抽奖次数
/// todayTTTimes:能抽奖的总次数
///
///
///每天的抽奖总次数
///
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 jsonDict = new Dictionary();
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 itemlist = itemBll.GetModelList("actId=" + aid);//该活动的所有奖项信息
int ttJpNum = 0;
for (int i = 0; i < itemlist.Count; i++)
{
ttJpNum += itemlist[i].jpRealNum.Value;
}
IList 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 方法
///
/// 取中奖的项目
///
///所有的奖品信息
///已经中奖的列表
///
private Model.wx_dzpAwardItem getZJItem(IList itemlist, IList haszjlist)
{
IList zjItemlist = new List();//剩余奖品列表
Model.wx_dzpAwardItem tmpItem = new Model.wx_dzpAwardItem();
Model.wx_dzpAwardItem stmpItem = new Model.wx_dzpAwardItem();
IList 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();
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];
}
///
/// 判断该用户的抽奖次数
///
///
///
private int personCJTimes(string openid, int aid)
{
int times = 0;
times = utbll.GetRecordCount("actId=" + aid + " and openid='" + openid + "'");
return times;
}
///
/// 判断今天是否已经超出抽奖次数
/// todayTTTimes:能抽奖的总次数
///
///
///每天的抽奖总次数
///
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;
}
}
///
/// 返回中奖序列号
///
///
///
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;
}
}
}
用c#开发微信 系列汇总