private void AskWeixin(string token, string nextopenid, int nowotainno) { //获取关注者列表 string geturl = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + token; if (nextopenid != "") { geturl = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + token + "&next_openid=" + nextopenid; } string jsonText = new GetUrlData().HttpGet(geturl); XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode("{\"root\":" + jsonText + "}"); XmlElement rootElement = doc.DocumentElement; if (rootElement.SelectSingleNode("errcode") == null) { int id = 0; string total = rootElement.SelectSingleNode("total").InnerText; string count = rootElement.SelectSingleNode("count").InnerText; string next_openid = rootElement.SelectSingleNode("next_openid").InnerText; XmlNode data = rootElement.SelectSingleNode("data"); string openid = ""; foreach (XmlNode node in data.ChildNodes) { openid += node.InnerText + ","; } openid = openid.Substring(0, openid.Length - 1); DateTime obtaintime = DateTime.Now; string errcode = ""; string errmsg = ""; int insertlog = new ObtainGzListLogData().InsObtainLog(id, total, count, openid, next_openid, obtaintime, errcode, errmsg, comid, dealuserid, nowotainno); } else { int id = 0; string total = "0"; string count = "0"; string next_openid = "0"; string openid = ""; DateTime obtaintime = DateTime.Now; XmlNode data = rootElement.SelectSingleNode("data"); string errcode = rootElement.SelectSingleNode("errcode").InnerText; string errmsg = rootElement.SelectSingleNode("errmsg").InnerText; int insertlog = new ObtainGzListLogData().InsObtainLog(id, total, count, openid, next_openid, obtaintime, errcode, errmsg, comid, dealuserid, nowotainno); } }
protected void Button1_Click(object sender, EventArgs e) { initJavascript(); //根据公司id得到开发者凭据 WeiXinBasic basicc = new WeiXinBasicData().GetWxBasicByComId(comid); if (basicc != null) { //获取凭证(首先判断数据库是否存在凭证以及是否过期,如过期,重新获取) WXAccessToken token = GetAccessToken(comid, basicc.AppId, basicc.AppSecret); //获得以前总共抓取关注者列表的次数 int MaxOtainNo = new ObtainGzListLogData().GetMaxObtainNo(comid); //计算需要向微信端发送请求次数 int weixintotal = AskWeixinTotal(token.ACCESS_TOKEN);//获得关注微信用户总数目 if (weixintotal == 0) { Literal1.Text = "获得关注微信用户总数目出错"; return; } int askno = int.Parse(Math.Ceiling((double)weixintotal / (double)10000).ToString()); for (int i = 0; i < askno; i++) { if (i == 0)//第一次请求,发送无参数next_openid { AskWeixin(token.ACCESS_TOKEN, "", MaxOtainNo + 1); } else //第一次以后请求,发送带参数next_openid { string next_openid = new ObtainGzListLogData().GetNextOpenId(comid, MaxOtainNo + 1); if (next_openid != "") { AskWeixin(token.ACCESS_TOKEN, next_openid, MaxOtainNo + 1); } } } //BindGrid(comid, MaxOtainNo + 1); UnloadJavascript(); Literal1.Text = "共获取微信关注用户数量:" + weixintotal; } else { UnloadJavascript(); Literal1.Text = "公司开发者凭据获取有误"; } }
protected void Button2_Click(object sender, EventArgs e) { initJavascript(); //获得以前总共抓取关注者列表的次数 int MaxOtainNo = new ObtainGzListLogData().GetMaxObtainNo(comid); if (MaxOtainNo == 0) { Literal2.Text = "还未获取过微信关注者列表"; } else { ////验证一下是否拆分过,拆分过不在拆分 //bool issplited = false; //if (issplited == true) //{ // Literal2.Text = "关注者列表已经拆分过无需再分"; // return; //} //else //{ //获得以前总共拆分过关注者列表的次数 int MaxSplitNo = new ObtainGzListSplitData().MaxSplitNo(comid, MaxOtainNo); IList <ObtainGzListLog> loglist = new ObtainGzListLogData().GetObtaingzlistlog(comid, MaxOtainNo); if (loglist != null) { string openidstr = ""; foreach (ObtainGzListLog log in loglist) { openidstr += log.Openid + ","; } openidstr = openidstr.Substring(0, openidstr.Length - 1); string[] str = openidstr.Split(','); //每20000个一组,判断可以拆分为几组 int splitnum = int.Parse(Math.Ceiling((double)(str.Length) / (double)20000).ToString()); if (splitnum == 1) { ObtainGzListSplit splitmodel = new ObtainGzListSplit { Id = 0, Comid = comid, Dealerid = dealuserid, Total = str.Length, Splitcount = str.Length, Splitno = MaxSplitNo + 1, Obtainno = MaxOtainNo, Splittime = DateTime.Now, Splitopenid = openidstr, Issuc = 1 }; new ObtainGzListSplitData().InsertsObtainGzListSplit(splitmodel); } else { //获取拆分的openid字符串 for (int i = 1; i <= splitnum; i++) { if (i == splitnum) { //录入最后不满20000的openid字符串 string splitopenid = ""; for (int j = 20000 * (splitnum - 1); j < str.Length; j++) { splitopenid += str[j] + ","; } splitopenid = splitopenid.Substring(0, splitopenid.Length - 1); ObtainGzListSplit splitmodel = new ObtainGzListSplit { Id = 0, Comid = comid, Dealerid = dealuserid, Total = str.Length, Splitcount = (str.Length) % 20000, Splitno = MaxSplitNo + 1, Obtainno = MaxOtainNo, Splittime = DateTime.Now, Splitopenid = splitopenid, Issuc = 1 }; new ObtainGzListSplitData().InsertsObtainGzListSplit(splitmodel); } else { string splitopenid = ""; for (int j = 20000 * (i - 1); j < 20000 * i; j++) { splitopenid += str[j] + ","; } splitopenid = splitopenid.Substring(0, splitopenid.Length - 1); ObtainGzListSplit splitmodel = new ObtainGzListSplit { Id = 0, Comid = comid, Dealerid = dealuserid, Total = str.Length, Splitcount = 20000, Splitno = MaxSplitNo + 1, Obtainno = MaxOtainNo, Splittime = DateTime.Now, Splitopenid = splitopenid, Issuc = 1 }; new ObtainGzListSplitData().InsertsObtainGzListSplit(splitmodel); } } } UnloadJavascript(); Literal2.Text = "微信关注者总数目:" + str.Length; BindGrid2(comid, MaxSplitNo + 1, MaxOtainNo); } else { UnloadJavascript(); Literal2.Text = "获取微信关注者列表为空"; } //} } }