为什么能裂变推广是营销学和心理学的范畴了,这里举个简单的例子来介绍。公众号有足以吸引粉丝的地方,要么是知识、要么是优惠、要么是服务,反正不同于其他人,能够吸引人关注;有了这个前提,怎么让更多的人知道这个公众号,要有很多的推广人,俗称合伙人,合伙人每推广一个粉丝关注,都有回报,要么短期的一次性回报,要么长期的粉丝消费酬金回报。下面通过实例讲解:

一、演示应用过程

1、对公众号输入合伙人

2、获取合伙人自己定制的海报,内置公众号分配给的带参数二维码

3、推荐他人享受优惠,扫码关注

二、实现逻辑

1、注册合伙人,通过手机号验证是合伙人本人,从空闲的二维码清单中给其分配一个。上篇文章给出了这个二维码清单的数据表。

代码以后再讲。

2、再来看微信用户关注事件,有普通关注和扫描带参数二维码的关注,普通关注之前的文章讲过了,这里重点介绍微信用户扫描带参数二维码事件的处理。用户扫描带场景值二维码时,推送以下两种事件:

(1)如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

(2)如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。

用户未关注时,进行关注后的事件推送

推送XML数据包示例:

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[FromUser]]></FromUserName><CreateTime>123456789</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[subscribe]]></Event><EventKey><![CDATA[qrscene_123123]]></EventKey><Ticket><![CDATA[TICKET]]></Ticket>
</xml>

注意上面EventKey的内容只取_之后的数字,用于获取weixin_qrcode_ticket表中scene_id对应的二维码图片。因为已经事先批量下载准备好二维码,无需通过Ticket方式再次获取。

三、相关源码

在接收到微信服务器发来的事件之后,首先由指定的接口网页AccessWx.aspx对事件类型进行判别,然后交给指定的事件处理类处理和回应。在本系列文章第1篇介绍的AccessWx.aspx.cs中开始部分引入命名空间using QinMing.Weixin.EventHandlerSubscribe;

并完善下面处理subscribe这一段,增加本篇给出的关注事件处理环节。

            else if(MsgType == "event")  {string Event = xn.SelectSingleNode("//Event").InnerText;if(Event == "subscribe"){//对用户关注公众号的事件处理,使用QinMing.Weixin.EventHandlerSubscribe命名空间下的SubscribeEventDeal类SubscribeEventDeal ued = new SubscribeEventDeal();Response.Write(ued.DealResult(weixinXML));    }}

在命名空间QinMing.Weixin.EventHandlerSubscribe下新建一个类SubscribeEventDeal,用来处理微信服务器发来的关注事件消息。记得类源码文件要放在App_Code目录下!下面是关注事件消息处理源码,这段在第(10)篇中讲过一部分,当时还没加入扫码带参数二维码的处理以及发红包处理。
QinMingWeixinEventHandlerSubscribe.cs文件内容如下:

using System;
using System.Web;
using System.Xml;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using QinMing.Config;
using QinMing.Tools;
using QinMing.Tools.DB;
using QinMing.Weixin.ReturnContent;
using QinMing.WeixinUserInfo;
using QinMing.WeixinPayPayment;namespace QinMing.Weixin.EventHandlerSubscribe
{//事件消息处理:关注公众号public class SubscribeEventDeal :System.Web.UI.Page{public string DealResult(string weixinXML){string content = DealSubscribe(weixinXML);  return content;}public string DealSubscribe(string weixinXML){string content1="";string strresponse = "";XmlDocument doc = new XmlDocument();doc.LoadXml(weixinXML);XmlNodeList list = doc.GetElementsByTagName("xml");XmlNode xn = list[0];string FromUserName = xn.SelectSingleNode("//FromUserName").InnerText;   //关注用户的加密后openidstring ToUserName = xn.SelectSingleNode("//ToUserName").InnerText;       //公众微信号原始IDstring MsgType=xn.SelectSingleNode("//MsgType").InnerText;string Event=xn.SelectSingleNode("//Event").InnerText;string EventKey = xn.SelectSingleNode("//EventKey").InnerText;ReturnMsg rm = new ReturnMsg();if(String.IsNullOrEmpty(EventKey))   //常规关注{DealJoin(FromUserName);SaveEventCommon(FromUserName, ToUserName);                content1 = "欢迎您:\n\n"+ "[玫瑰]超值优惠券[玫瑰]\n"+ "肯德基、麦当劳、汉堡王、德克士、必胜客、星巴克、Coco、猫眼、美团外卖、饿了么、滴滴等上百家全国知名连锁商家4折起优惠券,随时买随时用,无需加会员和预充值,全国门店通用!\n\n"+ "<a href='https://' >点击这里购买!</a>"+ "\n\n"+ "<a href='https://' >点击这里购买!!</a>"+ "\n\n"+ "<a href='https://' >点击这里购买!!!</a>"+ "\n\n"+ "您也可以通过菜单”超值优惠券“进入购买页面,总有惊喜在等您哦!";strresponse = rm.ReturnText(FromUserName, ToUserName, content1); //给管理员发送新粉丝关注通知QinMing.WeixinTemplateMessage.SendTemplateMessage.SendRemindMsg("管理员openid", "新粉丝关注提醒(来源:普通关注)" + FromUserName, "http://www.yourweb.com/Weixin/DisplayOneUser.aspx?open_id=" + FromUserName);  //告知管理员有新粉丝关注} else    //扫描带参数的二维码关注,一人一码、一店一码{DealJoin(FromUserName);string tmpEventKey = EventKey.Substring(EventKey.LastIndexOf("_") + 1);string ticket = xn.SelectSingleNode("//Ticket").InnerText;SaveEventScan(FromUserName, ToUserName, tmpEventKey, ticket);if(tmpEventKey == "10")   //某个指定的带参数二维码scene_id{}else{strresponse = ScanWithQrCodeNew(FromUserName, ToUserName, tmpEventKey); }}return strresponse;}//记录粉丝关注公众号时的相关信息public void DealJoin(string FromUserName){SqlConnection conn = new SqlConnection(QinMingConfig.DatabaseConnStr);conn.Open();SqlCommand cmd = new SqlCommand();SqlDataReader dr;cmd.Connection = conn;cmd.CommandText = "insert into weixin_join_log (open_id,join_time,remove_flag) values('" + FromUserName + "',getdate(),0)";cmd.ExecuteScalar();cmd.CommandText = "select * from weixin_user_info where open_id ='" + FromUserName + "' ";dr = cmd.ExecuteReader();if(dr.Read()){dr.Close();cmd.CommandText = "update weixin_user_info set remove_flag='已关注' where open_id='" + FromUserName + "'";cmd.ExecuteScalar();  //新增粉丝如曾关注过,取关后重新关注的,变更状态}else{dr.Close();cmd.CommandText = "insert into weixin_user_info (open_id,remove_flag,personal_score,join_time) values('" + FromUserName + "','已关注',0,getdate())";cmd.ExecuteScalar();  //新增粉丝如曾未关注过,增加粉丝记录//微信用户首次关注公众号时,发送一个随机红包。SendNewUserRedPacket(FromUserName);}if (conn.State == ConnectionState.Open){conn.Close();conn.Dispose();}            QinMingWeixinUserInfo wui=new QinMingWeixinUserInfo();wui.UpdateUserInfo(FromUserName);    //获取用户信息并更新weixin_user_info表}/*给一个新关注公众号的粉丝发红包,仅限首次关注,取消关注后再次关注时没有此红包*/public void SendNewUserRedPacket(string open_id){Random r = new Random();string ran1 = r.Next(1000, 9999).ToString();string ran2 = r.Next(随机红包最小值, 随机红包最大值).ToString();string out_trade_no = QinMingConfig.Weixin_MchId + DateTime.Now.ToString("yyyyMMddHHmmss") + ran1;QinMingWeixinPayPayment.SendRedPackOne("降价联盟", "新粉福利", open_id, ran2, "新粉关注红包", "", out_trade_no);}//用户扫描带参数的二维码时处理动作public string ScanWithQrCodeNew(string FromUserName, string ToUserName, string EventKey){string strresponse = "";ReturnMsg rm = new ReturnMsg();string guishu_mobile = "";string guishu_name = "";string guishu_type = "";string scan_title = "";string scan_title_sub = "";string scan_image_url = "";string scan_redirect_url = "";string r_red_packet_min = "";string r_red_packet_max = "";SqlConnection conn = new SqlConnection(QinMingConfig.DatabaseConnStr);conn.Open();SqlCommand cmd = new SqlCommand();SqlDataReader dr;cmd.Connection = conn;cmd.CommandText = "select * from weixin_qrcode_ticket where scene_id=" + EventKey + " ";dr = cmd.ExecuteReader();if(dr.Read()){if(dr["scan_type"].ToString() == "优惠券"){guishu_mobile = dr["user_id"].ToString();guishu_name = dr["user_name"].ToString();guishu_type = dr["scan_type"].ToString();scan_title = dr["scan_title"].ToString();scan_title_sub = dr["scan_title_sub"].ToString();scan_image_url = dr["scan_image_url"].ToString();scan_redirect_url = dr["scan_redirect_url"].ToString();r_red_packet_min = dr["r_red_packet_min"].ToString();  //合伙人推荐单粉红包最小值r_red_packet_max = dr["r_red_packet_max"].ToString();  //合伙人推荐单粉红包最大值Random r = new Random();int RandomRedpack = r.Next(int.Parse(r_red_packet_min), int.Parse(r_red_packet_max));strresponse = rm.ReturnText(FromUserName,ToUserName,"欢迎您:[咖啡]\n\n"+ "[玫瑰]超值优惠券[玫瑰]\n"+ "肯德基、麦当劳、汉堡王、德克士、必胜客、星巴克、Coco、猫眼、美团外卖、饿了么、滴滴等上百家全国知名连锁商家4折起优惠券,随时买随时用,无需加会员和预充值,全国门店通用!\n\n"+ "<a href='https://' >点击这里购买!</a>"+ "\n\n"+ "<a href='https://' >点击这里购买!!</a>"+ "\n\n"+ "<a href='https://' >点击这里购买!!!</a>"+ "\n\n"+ "您也可以通过菜单”超值优惠券“进入购买页面,总有惊喜在等您哦!");dr.Close();//给推荐的合伙人发红包,用生成红包记录自行提现方式;非首次扫码关注公众号,不发推荐红包包/**/if(int.Parse(QinMingToolsDB.SearchOneField("select count(*) r_m from weixin_user_info where open_id= '" + FromUserName + "'","r_m")) >= 1 ){//如果用户表中已经存在微信用户openid,则表示非首次关注,不给推荐人发红包}else{//如果用户表中没有微信用户openid,则表示首次关注,给推荐人发红包;在推荐红包表中追加记录,需推荐人自行提现string test = CreateScanQrCodeRedpack(FromUserName, guishu_mobile, guishu_type, RandomRedpack.ToString());}//如果是带参数二维码扫码关注,更新新粉丝扫码推荐人归属信息。cmd.CommandText = "update weixin_user_info set guishu_mobile='" + guishu_mobile + "',guishu_type ='" + guishu_type + "' where remove_flag='已关注' and open_id='" + FromUserName + "' ";cmd.ExecuteScalar();//告知管理员有新粉丝扫码关注QinMing.WeixinTemplateMessage.SendTemplateMessage.SendRemindMsg("管理员openid", "新粉丝关注提醒(来源:" + guishu_name + ")"  + FromUserName, "http://www.yourweb.com/Weixin/DisplayOneUser.aspx?open_id=" + FromUserName);  //插入带参数二维码被扫码的记录cmd.CommandText = "insert into weixin_ad_image_read_log (share_qrcode_id,read_open_id,read_time) values (" + EventKey + ",'" + FromUserName + "',getdate())"; //EventKey对应的是weixin_qrcode_ticket表中的scene_id,二维码分配关系cmd.ExecuteScalar();}else{dr.Close();}if (conn.State == ConnectionState.Open){conn.Close();conn.Dispose();}}return strresponse;}//微信用户通过扫描带参数二维码关注公众号时,给推荐扫码的人追加一条红包记录public string CreateScanQrCodeRedpack(string FromUserName, string guishu_mobile, string guishu_type, string redpack_fee){string order_id = QinMingToolsDB.SearchOneField("select isnull(max(order_id),0)+1 r_num from weixin_redpack_log_yhq_spread","r_num");string fromopenid = QinMingToolsDB.SearchOneField("select open_id from weixin_bind_mobile_all where mobile = '"+ guishu_mobile +"'","open_id");string scene_id = QinMingToolsDB.SearchOneField("select top 1 * from weixin_qrcode_ticket where user_id = '"+ guishu_mobile +"' and scan_type = '"+ guishu_type +"'","scene_id");string fromname = QinMingToolsDB.SearchOneField("select top 1 * from weixin_qrcode_ticket where user_id = '"+ guishu_mobile +"' and scan_type = '"+ guishu_type +"'","user_name");string strsql = "insert into weixin_redpack_log_yhq_spread(order_id,open_id,gen_time,redpack_class,redpack_fee,scene_id,from_user_id,from_user_name,from_open_id,remark,out_trade_no) \n"+"values("+ order_id +",'"+ FromUserName +"',getdate(),'优惠券推荐新粉红包',"+ redpack_fee +",'"+ scene_id +"','"+ guishu_mobile +"','"+ fromname +"','"+ fromopenid +"','','')\n";QinMingToolsDB.InsertTable(strsql);return "2"; //用户}//保存普通关注事件信息。public void SaveEventCommon(string FromUserName, string ToUserName){SqlConnection conn = new SqlConnection(QinMingConfig.DatabaseConnStr);conn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;cmd.CommandText = "insert into weixin_recv_event (msg_type,event_type,open_id,gh_id,recv_time) "+ "values ('event','subscribe','" + FromUserName + "','" + ToUserName + "',getdate()) ";QinMingTools.WriteLog("sql语句:", cmd.CommandText);cmd.ExecuteScalar();if (conn.State == ConnectionState.Open){conn.Close();conn.Dispose();}}//保存扫描带参数二维码事件信息。public void SaveEventScan(string FromUserName, string ToUserName,string EventKey, string Ticket){SqlConnection conn = new SqlConnection(QinMingConfig.DatabaseConnStr);conn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;cmd.CommandText = "insert into weixin_recv_event (msg_type,event_type,open_id,gh_id,recv_time,event_key,ticket) "+ "values ('event','subscribe','" + FromUserName + "','" + ToUserName + "',getdate(),'" + EventKey + "','" + Ticket + "') ";QinMingTools.WriteLog("sql语句:", cmd.CommandText);cmd.ExecuteScalar();if (conn.State == ConnectionState.Open){conn.Close();conn.Dispose();}}}
}

上面代码中用到了数据库操作类Tools.DB;还有微信支付类QinMingWeixinPayPayment中的发送红包操作SendRedPackOne,后期讲解微信支付时给出源码。

四、应用演示

1、新粉丝红包

2、合伙人推荐红包

收到红包的感觉是不是很爽?

实例:用C#.NET手把手教你做微信公众号开发(12)--带参数二维码裂变推广相关推荐

  1. 实例:用C#.NET手把手教你做微信公众号开发(20)--使用微信支付线上收款:jsapi方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下jsapi支付,场景就是在微信内打开某个页面,完成在线支付,同样一个网页,使用微信打开就是js ...

  2. 实例:用C#.NET手把手教你做微信公众号开发(21)--使用微信支付线上收款:H5方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下H5场景支付,使用手机浏览器打开就是H5方式,最常见的推广是短信内置链接,这种场景需要调用微信 ...

  3. 实例:用C#.NET手把手教你做微信公众号开发(11)--生成带参数二维码

    上一篇讲了普通关注的各种情景,接下来准备详细讲解带参数的二维码的应用实例.在下一篇详解之前,这里先介绍一下如何下载二维码.生成二维码表,为后续的应用做好准备. 为了满足用户渠道推广分析和用户帐号绑定等 ...

  4. 实例:用C#.NET手把手教你做微信公众号开发(10)--事件消息处理之关注公众号(普通关注)

    一.事件消息种类 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后 ...

  5. 实例:用C#.NET手把手教你做微信公众号开发(22)--网页里通过OAuth获取用户openid

    第一篇:理论 如果一个用户并未关注某个公众号,只是在微信内打开了公众号web服务器上的某个网页,要如何获取用户的openid以及用户的微信信息,以便实现业务逻辑呢?本篇讲述网页授权OAuth获取微信用 ...

  6. 实例:用C#.NET手把手教你做微信公众号开发(3)--普通消息处理之图片

    本着简短.便于理解应用的原则,本系列文章每次只讲一个公众号知识点,给出一个应用实例,通过一个知识点帮助你掌握公众号一类应用的开发方法. 上一篇我们掌握了微信客户端.微信服务器.你的服务器之间的信息互动 ...

  7. 实例:用C#.NET手把手教你做微信公众号开发(19)--使用微信支付转账到微信粉丝零钱账户

    公众号给微信用户支付费用的方式有很多种,最常用的是发红包和转账到零钱账户,上一篇文章详细讲解了使用发红包的过程,从公众号内的配置,到微信支付的配置,再到具体的类实现. 本篇主要讲解转账到零钱,具体的类 ...

  8. 实例:用C#.NET手把手教你做微信公众号开发(13)--事件消息处理之取消关注

    一.取消关注事件 用户在取消关注公众号时,微信会把这个事件推送到开发者填写的URL,方便开发者做帐号的解绑等处理. <xml><ToUserName><![CDATA[t ...

  9. 实例:用C#.NET手把手教你做微信公众号开发(6)--普通消息处理之视频、小视频

    本篇讲解微信客户端向公众号发送视频和小视频的处理方式. 视频消息常见应用: 在线教学: 基于公众号的定向类型小视频应用,类似于抖音.快手,但不用再安装app: 视频剪辑.特效添加,比如美颜: 其它视频 ...

最新文章

  1. create-react-app 2.0中使用antd(eject)
  2. Rose VS PowerDesigner
  3. 大佬的设计模式PDF学习笔记!
  4. #161: 给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。 你的任务就是检测矩阵是否符合条件...
  5. MySQL创建普通用户
  6. html5跨域 postmessage,html5跨域通讯之postMessage的用法总结
  7. python__实参前加*和**的(拆包)功能
  8. 【转】Unity3D研究院之设置自动旋转屏幕默认旋转方向
  9. [论文翻译]Attention Is All You Need
  10. __declspec《转》
  11. BeyondCompare 源代码比对解决方案
  12. 现代优化算法 (二): 遗传算法 及应用举例
  13. Python基础之文件和数据格式化
  14. matlab画一条平滑曲线,Matlab画平滑曲线的两种方法( 拟合或插值后再用plot即可)...
  15. vue中watch进行ajax,vue watch自动检测数据变化实时渲染的方法
  16. PROC FORMAT过程
  17. Hulu新剧 |《成瘾剂量》-- 揭开美国“神药”黑幕
  18. 数据结构与算法实验6——图论 7-9 哥尼斯堡的“七桥问题”
  19. 微信编辑器 wxEditor 最牛逼的富文本编辑器
  20. 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 5

热门文章

  1. 码神-day8-java
  2. 有什么md5修改工具?快把这些工具收好
  3. MySQL游标无法获取数据-1329 - No data - zero rows fetched, selected, or processed
  4. 大数据处理算法--Bloom Filter布隆过滤
  5. 论坛介绍 | COSCon'22 开源治理(G)
  6. 高维非空间数据可视化
  7. 几款磁力搜索引擎,找资料更方便
  8. PBR标准化工作流程
  9. DPDK环境搭建报错及解决方法总结
  10. Mac下安装SecureCRT并激活 阿星小栈