人生的意志和劳动将创造奇迹般的奇迹。

Model层实体类:

   public class UserList{public string total { get; set; }public string count { get; set; }public userlistopenid data { get; set; }public string next_openid { get; set; }}public class userlistopenid{public List<string> openid { get; set; }}
  public class WxGroupsInfo{public string Group_ID { get; set; }//分组编号public string Group_Name { get; set; }//分组名称public string Group_Count { get; set; }//分组人数}

WX.aspx内容:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WX.aspx.cs" Inherits="test.WX" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><style type="text/css">.inputstyle {height: 35px;line-height: 35px;text-indent: 5px;width: 350px;background-image: url('images/inputbg.gif');background-repeat: repeat-x;border-top: solid 1px #a7b5bc;border-left: solid 1px #a7b5bc;border-right: solid 1px #ced9df;border-bottom: solid 1px #ced9df;margin: 15px auto 15px auto;}.g_title {width: 100%;border-bottom: 2px solid #ced9df;font-size: 20px;font-weight: bold;text-align: left;text-indent: 5px;height: 40px;line-height: 40px;}th {height: 35px;background-color: #31bb34;background-repeat: repeat-x;}tr { height: 30px; }#shownewgroup {width: 300px;height: 200px;background-color: white;z-index: 9999;border: 2px solid #DDD;top: 40%;left: 40%;background-color: #fff;position: fixed;margin: -100px auto auto -100px;display: none;}#shownewgroupzhezhaoceng {height: 200%;width: 200%;left: 0px;top: 0px;position: fixed;z-index: 9998;background: rgb(50, 50, 50);background: rgba(0, 0, 0, 0.5);display: none;}.closeLogin {height: 30px;border-bottom: 2px solid #31bb34;text-align: right;line-height: 30px;font-size: 14px;font-weight: bold;}a:hover { cursor: pointer; }.inputstyle22 {height: 35px;line-height: 35px;text-indent: 5px;width: 280px;background-image: url('images/inputbg.gif');background-repeat: repeat-x;border-top: solid 1px #a7b5bc;border-left: solid 1px #a7b5bc;border-right: solid 1px #ced9df;border-bottom: solid 1px #ced9df;float: left;margin: auto 5px auto 5px;}</style><style type="text/css">.button {font: 15px Calibri, Arial, sans-serif; text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.4);text-decoration: none !important;white-space: nowrap;display: inline-block;vertical-align: baseline;position: relative;cursor: pointer;padding: 4px 20px;background-repeat: no-repeat; background-position: bottom left;background-image: url('button_bg.png');background-position: bottom left, top right, 0 0, 0 0;background-clip: border-box;-moz-border-radius: 8px;-webkit-border-radius: 8px;border-radius: 8px;-moz-box-shadow: 0 0 1px #fff inset;-webkit-box-shadow: 0 0 1px #fff inset;box-shadow: 0 0 1px #fff inset;-webkit-transition: background-position 1s;-moz-transition: background-position 1s;transition: background-position 1s;}.blue.button {color: #0f4b6d !important;border: 1px solid #84acc3 !important;background-color: #48b5f2;background-image: url('button_bg.png'), url('button_bg.png'),-moz-radial-gradient(center bottom, circle, rgba(89, 208, 244, 1) 0, rgba(89, 208, 244, 0) 100px),-moz-linear-gradient(#4fbbf7, #3faeeb);background-image: url('button_bg.png'), url('button_bg.png'),-webkit-gradient(radial, 50% 100%, 0, 50% 100%, 100, from(rgba(89, 208, 244, 1)), to(rgba(89, 208, 244, 0))),-webkit-gradient(linear, 0% 0%, 0% 100%, from(#4fbbf7), to(#3faeeb));}.blue.button:hover {background-color: #63c7fe;background-image: url('button_bg.png'), url('button_bg.png'),-moz-radial-gradient(center bottom, circle, rgba(109, 217, 250, 1) 0, rgba(109, 217, 250, 0) 100px),-moz-linear-gradient(#63c7fe, #58bef7);background-image: url('button_bg.png'), url('button_bg.png'),-webkit-gradient(radial, 50% 100%, 0, 50% 100%, 100, from(rgba(109, 217, 250, 1)), to(rgba(109, 217, 250, 0))),-webkit-gradient(linear, 0% 0%, 0% 100%, from(#63c7fe), to(#58bef7));}</style><script src="js/jquery-1.11.2.min.js"></script><script type="text/javascript">//修改分组名称调用的函数function EditRoster(PayNo, name) {//alert(PayNo+":"+name);var url = 'Edit.aspx?id=' + PayNo + "&name=" + name; //转向网页的地址; var name = 'add'; //网页名称,可为空; var iWidth = 600; //弹出窗口的宽度; var iHeight = 300; //弹出窗口的高度; //获得窗口的垂直位置 var iTop = (window.screen.availHeight - 30 - iHeight) / 2;//获得窗口的水平位置 var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;window.open(url, name, 'height=' + iHeight + ',innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=0,titlebar=no');}$(document).ready(function() {$(".newGroups").click(function() {$("#shownewgroupzhezhaoceng").show();$("#shownewgroup").show();}),$('.closeloginpage').click(function() {$("#shownewgroupzhezhaoceng").hide();$("#shownewgroup").hide();});});</script></head><body><form id="form1" runat="server"><div  class="g_title">分组管理</div><div id="shownewgroup"><div class="closeLogin"><span style="float: left; color: #08a5e0; font-size: 18px; text-indent: 5px;">新建分组</span><a class="closeloginpage button blue ">关闭</a></div><div style="font-size: 12px; height: 40px; color: red; line-height: 40px;">30字符以内</div><input  type="text" id="txtgroupsName" name="txtgroupsName"  class="inputstyle22" maxlength="30"  runat="server" value="分组名称" onfocus="if(value==defaultValue){value='';this.style.color='#000'}" onblur="if(!value){value=defaultValue;this.style.color='#999'}" style="color: #999"/><asp:LinkButton ID="LinkBtnCreateGroup" runat="server" OnClick="LinkBtnCreateGroup_Click"><div style="background-image: url('images/buttonbg.png'); width: 111px; height: 35px; line-height: 35px; font-weight: bold; float: left; margin-top: 20px; margin-left: 5px; text-align: center; color: #fff;">确定创建</div></asp:LinkButton></div><div id="shownewgroupzhezhaoceng"></div><table style="width: 1124px; margin: 10px auto 10px auto; border: 1px solid #ecd9df; text-align: center;"><asp:Repeater ID="RepeaterGroupList" runat="server" OnItemCommand="RepeaterGroupList_ItemCommand" OnItemDataBound="RepeaterGroupList_ItemDataBound"><HeaderTemplate><tr><th>序号</th><th>ID编号</th><th>分组名称</th><th>分组人数</th><th>操作</th></tr></HeaderTemplate><ItemTemplate><tr style='background-color: <%#(Container.ItemIndex%2 == 0) ? "#fff" : "#ced9ff" %>'><td><asp:Label ID="lbXuHao" runat="server" Text=""></asp:Label></td><td><%# Eval("Group_ID") %></td><td><%# Eval("Group_Name") %></td><td><%# Eval("Group_Count") %></td><td><a  class="button blue" onclick=" EditRoster('<%# Eval("Group_ID") %>', '<%# Eval("Group_Name") %>'); ">修改分组名称</a><asp:LinkButton ID="LinkBtnDeleteGroup" runat="server" CommandName="DeleteGroups" CommandArgument='<%# Eval("Group_ID") %>'  CssClass="button blue">删除分组</asp:LinkButton><asp:LinkButton ID="LinkBtnSendByGroup" runat="server" CommandName="SendByGroups" CommandArgument='<%# Eval("Group_ID") %>'  CssClass="button blue">此分组消息群发</asp:LinkButton><asp:LinkButton ID="LinkBtnMoveUserToGroup" runat="server" CommandName="MoveUserToGroup" CommandArgument='<%# Eval("Group_ID") %>'  CssClass="button blue">移动分组</asp:LinkButton></td></tr></ItemTemplate></asp:Repeater></table><a class="newGroups"><div style="background-image: url('images/buttonbg.png'); width: 111px; height: 35px; line-height: 35px; margin: 10px auto 10px 28px; font-weight: bold; float: left; text-align: center; color: #fff;">&nbsp;┼&nbsp;新建分组</div></a></form></body>
</html>

WX.aspx.cs代码:

public partial class WX : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){BindGroupList();this.DataBind();}private void BindGroupList(){WeiXinServer wxs = new WeiXinServer();//从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000),System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string jsonres = "";string content = Cache["AllGroups_content"] as string;if (content == null){jsonres = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token=" + Access_tokento;HttpWebRequest myRequest = (HttpWebRequest) WebRequest.Create(jsonres);myRequest.Method = "GET";HttpWebResponse myResponse = (HttpWebResponse) myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);content = reader.ReadToEnd();reader.Close();//设置缓存的数据7000秒后过期Cache.Insert("AllGroups_content", content, null, DateTime.Now.AddSeconds(7000),System.Web.Caching.Cache.NoSlidingExpiration);}//使用前需要引用Newtonsoft.json文件JObject jsonObj = JObject.Parse(content);int groupsnum = jsonObj["groups"].Count();List<WxGroupsInfo> wxgrouplist = new List<WxGroupsInfo>();for (int i = 0; i < groupsnum; i++){WxGroupsInfo wginfo = new WxGroupsInfo();wginfo.Group_ID = jsonObj["groups"][i]["id"].ToString();wginfo.Group_Name = jsonObj["groups"][i]["name"].ToString();wginfo.Group_Count = jsonObj["groups"][i]["count"].ToString();wxgrouplist.Add(wginfo);}this.RepeaterGroupList.DataSource = wxgrouplist;this.RepeaterGroupList.DataBind();}/// <summary>/// 绑定事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void RepeaterGroupList_ItemDataBound(object sender, RepeaterItemEventArgs e){if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem){Label lbXuHao = e.Item.FindControl("lbXuHao") as Label;int num = 1;lbXuHao.Text = num.ToString();for (int i = 0; i < this.RepeaterGroupList.Items.Count; i++){num += 1;lbXuHao.Text = num.ToString();}LinkButton LinkBtnDeleteGroup = e.Item.FindControl("LinkBtnDeleteGroup") as LinkButton;LinkButton LinkBtnSendByGroup = e.Item.FindControl("LinkBtnSendByGroup") as LinkButton;LinkBtnDeleteGroup.Attributes.Add("OnClick", "return confirm('您确定要删除该分组?删除后该分组内的人员即将恢复到默认分组!')");LinkBtnDeleteGroup.Attributes.Add("OnClick", "return confirm('您确定要群发消息到该分组?')");}}/// <summary>/// 执行事件/// </summary>/// <param name="source"></param>/// <param name="e"></param>protected void RepeaterGroupList_ItemCommand(object source, RepeaterCommandEventArgs e){ if (e.CommandName == "DeleteGroups"){WeiXinServer wxs = new WeiXinServer();string res = "";//从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000),System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string posturl = "https://api.weixin.qq.com/cgi-bin/groups/delete?access_token=" + Access_tokento;//POST数据例子:  POST数据例子:{"group":{"id":108}}string groupid = e.CommandArgument.ToString();string postData = "{\"group\":{\"id\":\"" + groupid + "\"}}";res = wxs.GetPage(posturl, postData);ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "","alert('删除成功!由于缓存问题,您可能需要重新登录才能看到效果!');location='WxGroupManageList.aspx';", true);}if (e.CommandName == "SendByGroups"){WeiXinServer wxs = new WeiXinServer();string res = "";//从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000),System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string posturl = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=" + Access_tokento;string groupid = e.CommandArgument.ToString();//string postData = "{\"group\":{\"id\":\"" + groupid.ToString() + "\"}}";JObject postData = new JObject();JObject filter = new JObject();filter.Add("is_to_all", false);filter.Add("group_id", groupid);JObject text = new JObject();text.Add("content", "测试内容!");postData.Add("filter", filter);postData.Add("text", text);postData.Add("msgtype", "text"); res = wxs.GetPage(posturl, postData.ToString());ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "","alert('群发成功!由于缓存问题,您可能需要重新登录才能看到效果!');location='WxGroupManageList.aspx';", true);}if (e.CommandName == "MoveUserToGroup"){WeiXinServer wxs = new WeiXinServer();string res = "";string Access_token = Cache["Access_token"] as string;if (Access_token == null){Access_token = wxs.GetAccessToken();Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string posturl = "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=" + Access_tokento;string UserListurl = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + Access_tokento + "&next_openid=";//{"total":2,"count":2,"data":{"openid":["","OPENID1","OPENID2"]},"next_openid":"NEXT_OPENID"}res = wxs.GetPage(UserListurl,"");UserList userList= JsonConvert.DeserializeObject<UserList>(res);String openid=userList.data.openid.FirstOrDefault();int togroup_id = 101;//输入分组IDstring postData = "{\"openid\":\"" + openid + "\",\"to_groupid\":" + togroup_id + "}";res = wxs.GetPage(posturl, postData);ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "","alert('移动分组成功!由于缓存问题,您可能需要重新登录才能看到效果!');location='WxGroupManageList.aspx';", true);}}/// <summary>/// 创建分组/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void LinkBtnCreateGroup_Click(object sender, EventArgs e){if (this.txtgroupsName.Value.Equals("分组名称")){////ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('不能为空!')", true);this.txtgroupsName.Focus();return;}WeiXinServer wxs = new WeiXinServer();string res = "";///从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000),System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string posturl = "https://api.weixin.qq.com/cgi-bin/groups/create?access_token=" + Access_tokento;string postData = "{\"group\":{\"name\":\"" + this.txtgroupsName.Value.ToString().Trim() + "\"}}"; res = wxs.GetPage(posturl, postData); ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "","alert('创建成功!如未显示,请退出重新登录即可!');location='WxGroupManageList.aspx';", true);}}

WeiXinServer.cs代码:

/// <summary>/// 微信服务类/// </summary>public class WeiXinServer{/// <summary>/// 获取通行证/// </summary>/// <returns></returns>public string GetAccessToken(){string url_token ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx3eb5bf1290db2ca0&secret=e6013be0a7338c7d3e02877db116e231";HttpWebRequest myRequest = (HttpWebRequest) WebRequest.Create(url_token);myRequest.Method = "GET";HttpWebResponse myResponse = (HttpWebResponse) myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);string content = reader.ReadToEnd();reader.Close();return content;}public string GetPage(string p, string postData){Stream outstream = null;Stream instream = null;StreamReader sr = null;HttpWebResponse response = null;HttpWebRequest request = null;Encoding encoding = Encoding.UTF8;byte[] data = encoding.GetBytes(postData);// 准备请求...try{// 设置参数request = WebRequest.Create(p) as HttpWebRequest;CookieContainer cookieContainer = new CookieContainer();request.CookieContainer = cookieContainer;request.AllowAutoRedirect = true;request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";request.ContentLength = data.Length;outstream = request.GetRequestStream();outstream.Write(data, 0, data.Length);outstream.Close();//发送请求并获取相应回应数据response = request.GetResponse() as HttpWebResponse;//直到request.GetResponse()程序才开始向目标网页发送Post请求instream = response.GetResponseStream();sr = new StreamReader(instream, encoding);//返回结果网页(html)代码string content = sr.ReadToEnd();string err = string.Empty;return content;}catch (Exception ex){string err = ex.Message;return string.Empty;}}}

Edit.aspx内容:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Edit.aspx.cs" Inherits="test.Edit" %><html ><head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title><style type="text/css">.inputstyle {height: 35px;line-height: 35px;text-indent: 5px;width: 280px;background-image: url('images/inputbg.gif');background-repeat: repeat-x;border-top: solid 1px #a7b5bc;border-left: solid 1px #a7b5bc;border-right: solid 1px #ced9df;border-bottom: solid 1px #ced9df;float: left;margin: auto 5px auto 5px;}</style></head><body><form id="form1" runat="server"><table border="1" style="width: 500px; border-collapse: collapse; margin: 20px auto 20px auto; line-height: 40px;"><tr><td style="text-align: right;">分组编号:</td><td> <asp:TextBox ID="txtGroupId" CssClass="inputstyle" Enabled="false" runat="server"></asp:TextBox></td></tr><tr><td style="text-align: right;">分组名称:</td><td> <asp:TextBox ID="txtGroupName" CssClass="inputstyle" runat="server"></asp:TextBox></td></tr><tr><td></td><td><asp:LinkButton ID="LinkBtnSet" runat="server" OnClick="LinkBtnSet_Click" ><div style="background-image: url('images/buttonbg.png'); width: 111px; height: 35px; line-height: 35px; float: left; font-weight: bold; text-align: center; color: #fff;">&nbsp;设&nbsp;置</div></asp:LinkButton></td></tr></table></form></body>
</html>

Edit.aspx.cs代码:

  public partial class Edit : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){if (Request.QueryString["id"] != null){string group_id = Request.QueryString["id"].ToString();string group_name = Request.QueryString["name"].ToString();this.txtGroupId.Text = group_id.ToString();this.txtGroupName.Text = group_name.ToString();this.txtGroupName.Focus();}}}/// <summary>/// 设置/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void LinkBtnSet_Click(object sender, EventArgs e){if (String.IsNullOrWhiteSpace(this.txtGroupName.Text.ToString().Trim())){ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('不能为空!');", true);this.txtGroupName.Focus();return;}if (this.txtGroupName.Text.Trim().Length > 30){ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('组名称应在30个字符之内!');", true);this.txtGroupName.Focus();return;}WeiXinServer wxs = new WeiXinServer();string res = "";//从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000),System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string posturl = "https://api.weixin.qq.com/cgi-bin/groups/update?access_token=" + Access_tokento;//POST数据例子:POST数据例子:{"group":{"id":108,"name":"test2_modify2"}}string postData = "{\"group\":{\"id\":\"" + txtGroupId.Text + "\",\"name\":\"" + this.txtGroupName.Text +"\"}}";res = wxs.GetPage(posturl, postData);//使用Newtonsoft.jsonJObject jsonObj = JObject.Parse(res);//获取返回结果的正确|true|false,string isright = jsonObj["errcode"].ToString(); //0string istrueorfalse = jsonObj["errmsg"].ToString(); //okif (isright.Equals("0") && istrueorfalse.Equals("ok")){//修改成功之后,刷新父窗体,关闭本页ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "","alert('修改成功!如未正常显示,属缓存问题,请重新登录即可!');window.open![这里写图片描述](https://img-blog.csdn.net/20161008103126694)er.location.reload();this.close();", true);}else{ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('修改失败!');this.close();",true);}}}

buttonbg.png

结果如图:



微信公众号【用户分组管理-web页面】相关推荐

  1. 获取微信公众号用户分组-php开发管理公众号用户

    经过上一节课程的学习, 你已经能够新建很多的用户分组, 要在我们的web服务器管理这些分组时, 你可以先从微信服务器把所有的分组获取到, 然后保存到自己的web服务器数据库, 这样下次使用时, 就可以 ...

  2. 微信公众号html标签,微信公众号用户标签管理

    开发者可以使用用户标签管理的相关接口,实现对公众号的标签进行创建.查询.修改.删除等操作,也可以对用户进行打标签.取消标签等操作. 标签管理 1. 创建标签 一个公众号,最多可以创建100个标签. 接 ...

  3. 微信公众号-模板消息管理

    微信公众号-模板消息管理 通过模板消息接口,公众号能向关注其账号的用户发送预设模板的消息.模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通 ...

  4. vue axios封装 获取微信公众号用户的openid

    目录 axios封装 openid vue vue+ts axios封装 一般会在项目的src目录中,新建一个文件夹,作为网络请求模块,用来封装axios, 创建axios实例: axios.crea ...

  5. 用java代码实现获取微信公众号用户关注列表

    获取微信公众号用户关注列表 通用工具类:CommonUtil package com.weixin.util;import java.io.BufferedReader; import java.io ...

  6. 重磅发布:史上首份揭秘微信公众号用户行为习惯研究报告

    文/契约 目录:一.前情提要二:数据来源及样本详情三:用户使用普通微信公众号行为习惯四:用户使用商家微信公众号行为习惯 一.前情提要 微信已成长为国内最大的超级App,全球拥有超11亿的用户,月活跃用 ...

  7. 微信公众号用户与网站用户的绑定方案

    微信公众号用户与网站用户的绑定方案 - 简书 微信公众号用户与网站用户的绑定-登陆公众号时获取openid(二)_136.la 微信公众号开发中的用户账号绑定 - huonan - 博客园

  8. 微信公众号中如何关闭本页面

    微信公众号中如何关闭本页面 如何通过弹框关闭本页面 如何通过弹框关闭本页面 网上有各种关闭本页面的方法,比如有history.back(),this.close(),window.close() 在手 ...

  9. 微信公众号用户认证机制升级方案

    微信公众号用户认证机制升级方案 微信公众号用户认证机制升级方案 背景 解决方案:Token机制 认证流程: 具体实现: 附录 背景 原认证机制为 cookie方式,缺点如下: 不通用,cookie方式 ...

最新文章

  1. 【青少年编程】【答疑】控制Scratch异步代码的执行顺序
  2. pb怎么连接dll_跑步学不会这项技术,谈何PB?
  3. csu 1756(数论+去重)
  4. cidaemon.exe是什么进程及如何关闭cidaemon.exe进程
  5. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析
  6. java知识点--基础篇(5)
  7. c调用按钮点击事件_Unity3d---对UI事件接口的一些测试和机制(坑)的总结
  8. css 的小细节,小总结
  9. 第三次作业:“我去图书馆”公众号用户体验分析
  10. 程序设计与算法----递归之放苹果问题
  11. OpenShift 4 Tekton (2) - OpenShift Pipeline入门-用Pipeline部署应用
  12. 《Linux编程》上机作业 ·001【Linux命令】
  13. .NET Framework-多线程网络编程
  14. java 权限url权限_Java秒杀系统实战系列~整合Shiro实现用户登录认证
  15. OpenCV实现验证otsu算法
  16. linux内存源码分析 - 内存压缩(实现流程)
  17. php 图像居中裁剪函数,php中自定义图像居中裁剪函数实现的代码案例
  18. python热力图_一、python可视化——热力图
  19. 如何用csdn上传资源
  20. 白白的python之路--Day1

热门文章

  1. 小程序门店助手认证流程
  2. 【编译原理-实验-1】词法分析器最详细设计报告(c++版)
  3. CDMA2000 1X和GPRS网络的对比(转)
  4. 3G技术的宠儿CDMA2000 1X
  5. java 工厂方法_java设计模式-工厂方法模式
  6. java设置表格可滚动条_java – 如何在SWT表中始终显示垂直滚动条?
  7. 在父亲节当天响起的618电商“变轨”奏鸣曲
  8. 儿童运动护齿市场现状及未来发展趋势分析
  9. 简易的HTML学习总结
  10. 《中美日的管理哲学》