/// <summary> /// 批量获取联系人详细信息 /// </summary> /// <param name="requestContacts"></param> /// <param name="pass_ticket"></param> /// <param name="uin"></param> /// <param name="sid"></param> /// <param name="skey"></param> /// <param name="deviceID"></param> public void BatchGetContact(string[] requestContacts, string pass_ticket, BaseRequest baseReq, Action <BatchGetContactResponse> CallBack) { BatchGetContactRequest req = new BatchGetContactRequest { BaseRequest = baseReq, Count = requestContacts.Length }; List <BatchUser> requestUsers = new List <BatchUser>(); for (int i = 0; i < req.Count; i++) { var tmp = new BatchUser { UserName = requestContacts[i], }; requestUsers.Add(tmp); } req.List = requestUsers.ToArray(); string requestJson = JsonConvert.SerializeObject(req); string url = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxbatchgetcontact?type=ex&r={0}&lang=zh_CN&pass_ticket={1}"; url = string.Format(url, GetR(), pass_ticket); http.Item.Request.HeadersDic["Accept"] = "application/json, text/plain, */*"; http.GetHtml(url, "post", requestJson, referer: "https://wx2.qq.com/", callBack: (x) => { string repJsonStr = x.response.DataString(); var rep = JsonConvert.DeserializeObject <BatchGetContactResponse>(repJsonStr); CallBack?.Invoke(rep); }); }
/// <summary> /// 批量获取联系人详细信息 /// </summary> /// <param name="requestContacts"></param> /// <param name="pass_ticket"></param> /// <param name="uin"></param> /// <param name="sid"></param> /// <param name="skey"></param> /// <param name="deviceID"></param> /// <returns></returns> public BatchGetContactResponse BatchGetContact(string[] requestContacts, string pass_ticket, BaseRequest baseReq) { string url = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxbatchgetcontact?type=ex&r={0}&lang=zh_CN&pass_ticket={1}"; url = string.Format(url, getTimestamp(DateTime.Now), pass_ticket); BatchGetContactRequest req = new BatchGetContactRequest(); req.BaseRequest = baseReq; req.Count = requestContacts.Length; List <BatchUser> requestUsers = new List <BatchUser>(); for (int i = 0; i < req.Count; i++) { var tmp = new BatchUser(); tmp.UserName = requestContacts[i]; requestUsers.Add(tmp); } req.List = requestUsers.ToArray(); string requestJson = JsonConvert.SerializeObject(req); string repJsonStr = http.POST_UTF8String(url, requestJson); var rep = JsonConvert.DeserializeObject <BatchGetContactResponse>(repJsonStr); return(rep); }
/// <summary> /// 批量获取联系人详细信息 /// </summary> /// <param name="requestContacts"></param> /// <param name="pass_ticket"></param> /// <param name="uin"></param> /// <param name="sid"></param> /// <param name="skey"></param> /// <param name="deviceID"></param> /// <returns></returns> public BatchGetContactResponse BatchGetContact(string[] requestContacts, string pass_ticket, BaseRequest baseReq) { SetHttpHeader("Accept", "application/json, text/plain, */*"); SetHttpHeader("Connection", "keep-alive"); SetHttpHeader("Accept-Encoding", "gzip, deflate, br"); string url = this.root_uri + "/cgi-bin/mmwebwx-bin/webwxbatchgetcontact?type=ex&r={0}&lang=zh_CN&pass_ticket={1}"; url = string.Format(url, getR(), pass_ticket); BatchGetContactRequest req = new BatchGetContactRequest(); req.BaseRequest = baseReq; req.Count = requestContacts.Length; List <BatchUser> requestUsers = new List <BatchUser>(); for (int i = 0; i < req.Count; i++) { var tmp = new BatchUser(); tmp.UserName = requestContacts[i]; requestUsers.Add(tmp); } req.List = requestUsers.ToArray(); string requestJson = JsonConvert.SerializeObject(req); string repJsonStr = PostString(url, requestJson); var rep = JsonConvert.DeserializeObject <BatchGetContactResponse>(repJsonStr); if (rep == null) { return(null); } return(rep); }
/// <summary> /// 获取联系人信息,例如初始化、群聊里面。 /// </summary> /// <param name="statusNotifyUserName">需要获取的UserName列表,包括群,个人用户,用英文,分割</param> /// <param name="EncryChatRoomId">默认为空,如果是获取群内成员详细信息,则填写encryChatRoomId,也就是群的UserName</param> public void GetBatchGetContactAsync(string statusNotifyUserName, string encryChatRoomId = "") { Task.Factory.StartNew(() => { try { //获取历史会话列表 string webwxbatchgetcontactUrl = string.Format(host + "/cgi-bin/mmwebwx-bin/webwxbatchgetcontact?type=ex&r={0}", Utils.GetJavaTimeStamp()); string[] chatNameArr = statusNotifyUserName.Split(','); bool finishGetChatList = false; BatchGetContactRequest batchGetContactRequest = new BatchGetContactRequest(); batchGetContactRequest.BaseRequest = baseRequest; int count = chatNameArr.Length; int index = 0; //一批次最多获取50条,多出来分批获取 while (!finishGetChatList) { batchGetContactRequest.List = new List <ChatRoom>(); if (((index + 1) * 50) < count) { for (int i = index * 50; i < (index + 1) * 50; i++) { batchGetContactRequest.List.Add(new ChatRoom { UserName = chatNameArr[i], EncryChatRoomId = encryChatRoomId }); } } else { for (int i = index * 50; i < count; i++) { batchGetContactRequest.List.Add(new ChatRoom { UserName = chatNameArr[i], EncryChatRoomId = encryChatRoomId }); } finishGetChatList = true; } BatchGetContactResponse batchGetContactMsg = httpClient.PostJson <BatchGetContactResponse>(webwxbatchgetcontactUrl, batchGetContactRequest); asyncOperation.Post( new SendOrPostCallback((list) => { BatchGetContactComplete?.Invoke(this, new TEventArgs <List <Contact> >((List <Contact>)list)); }), batchGetContactMsg.ContactList); index++; } } catch (Exception e) { asyncOperation.Post( new SendOrPostCallback((obj) => { ExceptionCatched?.Invoke(this, new TEventArgs <Exception>((Exception)obj)); }), e); } }); }