2 Star 1 Fork 101

大角Bangle / weixinHttpApi

forked from codeman35 / weixinHttpApi 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
MainForm.cs 20.04 KB
一键复制 编辑 原始数据 按行查看 历史
codeman35 提交于 2016-01-05 19:16 . no commit message
using FluorineFx.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
using System.Xml;
namespace WeiXinZhuaFaWang
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
jslogin();
qrcode();
login();
}
private void login()
{
ShowMsg("login.....");
if (__3)
{
//第三步,等待扫描
var time = new System.Windows.Forms.Timer();
time.Interval = sleeptime;
time.Stop();
int count = 0;
time.Tick += new EventHandler(delegate
{
if (count++ > login_try_times)
{
time.Stop();
throw new Exception("错误的次数超过了:" + login_try_times + "次");
}
SendHeader(httpclient, url_login[1]);
var task = httpclient.GetStringAsync(ReplaceKey(url_login[0]));
var result = task.Result;
if (result.IndexOf("window.redirect_uri=") != -1)
{
time.Stop();
redirect_uri = GetResultString(result, "\"(.*?)\"");
if (redirect_uri.IndexOf("wx2.qq.com")!=-1)
WXNUMBER = "2";
//执行第四部
doStep4();
}
});
time.Start();
}
}
private void qrcode()
{
ShowMsg("qrcode");
if (__2)
{
SendHeader(httpclient, url_qrcode[1]);
var task = httpclient.GetStreamAsync(ReplaceKey(url_qrcode[0]));
var result = task.Result;
this.pictureBox1.BackgroundImage = Image.FromStream(result);
}
}
private void jslogin()
{
ShowMsg("islogin");
if (__1)
{
SendHeader(httpclient, url_jslogin[1]);
var task = httpclient.GetStreamAsync(ReplaceKey(url_jslogin[0]));
var result = GetDeflateByStream(task.Result, "GBK");
UUID = GetCodeString(result, "200", "\"(.*?)\"");
}
}
private void doStep4()
{
this.pictureBox1.Visible = false;
this.listBox1.Visible = true;
this.lstBoxUser.Visible = true;
this.btnSend.Visible = true;
this.txtBoxMessage.Visible = true;
this.btnGetUserList.Visible = true;
redirect_uri_fun();
webwxinit_new();
webwxgetcontact();
//循环检查状态,如果得到了最新信息,然后开始执行
synccheck();
urldownload();
//开启一个timer,一直给我发送信息
var timer = new System.Timers.Timer();
timer.Interval = 1000;
timer.Elapsed += (o, e) => {
if (!bFirst)
{
timer.Interval = 10 * 60 * 1000;
bool b = false;
foreach (var s in USER_DI)
{
if (s.Value.IndexOf("都好") != -1)
{
b = true;
SendMsg(s.Key,USER_INFO, DateTime.Now.ToString(), false);
break;
}
}
if (b == false)
{
//如果走到这一步,就随机一个人发
SendMsg(USER_DI.ElementAt((new Random()).Next(USER_DI.Count())).Key, USER_INFO,DateTime.Now.ToString(), false);
}
}
};
timer.Start();
}
bool bFirst = true;
private void redirect_uri_fun()
{
ShowMsg("redirect_uri_fun");
if (__4)
{
HttpWebRequest h = (HttpWebRequest)HttpWebRequest.Create(redirect_uri);
h.AllowAutoRedirect = false;
h.CookieContainer = cookieContainer;
HttpWebResponse r = (HttpWebResponse)h.GetResponse();
//var list = GetAllCookies(cookieContainer);
using (System.IO.StreamReader read = new System.IO.StreamReader(r.GetResponseStream()))
{
string value = read.ReadToEnd();
if (value.IndexOf("pass_ticket") == -1) throw new Exception("没有得到wxsid信息");
step4xml = Xml2Json<Step4XML>(value);
}
r.Close();
}
}
private void synccheck()
{
ShowMsg("synccheck");
if (__6)
{
var urlA = "https://webpush[number].weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r={time}&skey={SKEY}&sid={SID}&uin={UIN}&deviceid={DeviceID}&synckey={synckey}&_={time}";
bool bRun = true;
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate
{
while (bRun)
{
Thread.Sleep(2000);
try
{
var url = ReplaceKey(urlA);
if (bFirst) ShowMsg("正在解析中...等待!");
JavaScriptObject obj = JavaScriptConvert.DeserializeObject(SyncKey) as JavaScriptObject;
JavaScriptArray list = obj["List"] as JavaScriptArray;
var k = "";
foreach (JavaScriptObject o in list)
k += "|" + o["Key"] + "_" + o["Val"];
url = url.Replace("{synckey}", k.Substring(1));
HttpWebRequest h = (HttpWebRequest)HttpWebRequest.Create(url);
h.AllowAutoRedirect = false;
h.CookieContainer = cookieContainer;
h.Accept = "application/javascript, */*;q=0.8";
HttpWebResponse r = (HttpWebResponse)h.GetResponse();
using (System.IO.StreamReader read = new System.IO.StreamReader(r.GetResponseStream()))
{
string value = read.ReadToEnd();
if (value.Contains("1101"))
{
bRun = false;
ShowMsg("请重新打开!" + url);
}
else
{
if (bFirst)
{
bFirst = false;
ShowMsg("正常运行!");
}
Console.WriteLine("1=>" + value);
//string ret = value;
//window.synccheck={retcode:"0",selector:"6"}
if (value.IndexOf("selector:\"0\"") == -1 && value.IndexOf("retcode:\"0\"") != -1)
doStep7();
}
}
r.Close();
}
catch
{
}
}
}));
}
}
private void webwxgetcontact()
{
ShowMsg("webwxgetcontact");
if (true)
{
var url = "https://wx[number].qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?pass_ticket={pass_ticket}&r={time}&skey={SKEY}";
HttpWebRequest h = (HttpWebRequest)HttpWebRequest.Create(ReplaceKey(url));
h.AllowAutoRedirect = false;
h.CookieContainer = cookieContainer;
h.Accept = "application/json, text/plain, */*";
HttpWebResponse r = (HttpWebResponse)h.GetResponse();
using (System.IO.StreamReader read = new System.IO.StreamReader(r.GetResponseStream()))
{
string value = read.ReadToEnd();
USER_LIST = JavaScriptConvert.DeserializeObject(value) as JavaScriptObject;
//显示到list中
var arr = USER_LIST["MemberList"] as JavaScriptArray;
lstBoxUser.Items.Clear();
foreach (JavaScriptObject o in arr)
{
USER_DI[o["UserName"] + ""] = o["NickName"] + "";
//NickName
lstBoxUser.Items.Add(o["NickName"] + ">" + o["UserName"]);
}
}
r.Close();
}
}
private void webwxinit_new()
{
ShowMsg("webwxinit_new");
if (__5)
{
SendHeader(httpclient, ReplaceHeaderKey(url_webwxinit[1]));
byte[] bs = Encoding.UTF8.GetBytes(ReplaceHeaderKey(@"{""BaseRequest"":{""Uin"":""{UIN}"",""Sid"":""{SID}"",""Skey"":""{SKEY}"",""DeviceID"":""{DeviceID}""}}"));
var task = httpclient.PostAsync(ReplaceKey(url_webwxinit[0]), new ByteArrayContent(bs));
{
string value = GetDeflateByStream(task.Result.Content.ReadAsStreamAsync().Result);
//"Ret": 1100,
if (!value.Contains("\"Ret\": 0"))
{
ShowMsg("没有返回正确的数据,webwxinit错误!");
throw new Exception("没有返回正确的数据,webwxinit错误!");
}
//USER_INFO
USER_INFO = SubString(value.Replace("\r", "").Replace("\n", ""), "\"User\": {", "NickName");
USER_INFO = SubString(USER_INFO, "\"UserName\": \"", "\",");
USER_NICKNAME = SubString(value.Replace("\r", "").Replace("\n", ""), "\"User\": {", "HeadImgUrl");
USER_NICKNAME = SubString(USER_NICKNAME, "\"NickName\": \"", "\",");
label1.Text = USER_INFO;
USER_DI.Add(USER_INFO, USER_NICKNAME);
this.Text = USER_NICKNAME+">>>转发微信机器人 V0.5 20151007 By LXW";
//SyncKey
SyncKey = SubString(value.Replace("\r", "").Replace("\n", ""), "\"SyncKey\": ", "}]}");
SyncKey += "}]}";
#if DEBUG
this.textBox1.Text = SyncKey;
#endif
}
}
}
private void webwxinit_old()
{
ShowMsg("webwxinit_old");
if (__5)
{
HttpWebRequest h = (HttpWebRequest)HttpWebRequest.Create(ReplaceKey(url_webwxinit[0]));
h.AllowAutoRedirect = false;
h.CookieContainer = cookieContainer;
h.Method = "POST";
h.Accept = "application/json, text/plain, */*";
h.ContentType = "application/json;charset=utf-8";
byte[] bs = Encoding.UTF8.GetBytes(ReplaceHeaderKey(@"{""BaseRequest"":{""Uin"":""{UIN}"",""Sid"":""{SID}"",""Skey"":""{SKEY}"",""DeviceID"":""{DeviceID}""}}"));
using (Stream reqStream = h.GetRequestStream())
{
reqStream.Write(bs, 0, bs.Length);
reqStream.Close();
}
HttpWebResponse r = (HttpWebResponse)h.GetResponse();
using (System.IO.StreamReader read = new System.IO.StreamReader(r.GetResponseStream()))
{
string value = read.ReadToEnd();
//"Ret": 1100,
if (!value.Contains("\"Ret\": 0"))
{
ShowMsg("没有返回正确的数据,webwxinit错误!");
throw new Exception("没有返回正确的数据,webwxinit错误!");
}
//USER_INFO
USER_INFO = SubString(value.Replace("\r", "").Replace("\n", ""), "\"User\": {", "NickName");
USER_INFO = SubString(USER_INFO, "\"UserName\": \"", "\",");
label1.Text = USER_INFO;
USER_DI.Add(USER_INFO, "我自己");
//SyncKey
SyncKey = SubString(value.Replace("\r", "").Replace("\n", ""), "\"SyncKey\": ", "}]}");
SyncKey += "}]}";
#if DEBUG
this.textBox1.Text = SyncKey;
#endif
}
r.Close();
}
}
// void UploadWxImage(string MsgID, string Form, string FormName, string ad)
// {
// try
// {
// //下载图片
// //https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg?&MsgID=8055351800675473074&skey=%40crypt_671d6fec_1cd01b65296c06ef559ae98b0646725a&type=slave
// //image/png,image/*;q=0.8,*/*;q=0.5
// //&type=slave 获取缩略图的意思
// Image img = DownLoadImage(MsgID);
// SendImage(Form, FormName, ad, img);
// }
// catch (Exception err)
// {
//#if DEBUG
// SendMsg(Form, USER_INFO, err.Message, false);
//#else
// SendMsg(Form, USER_INFO, "接收图片出现错误!", false);
//#endif
// }
// }
private Image DownLoadImage(string MsgID,string slave="&type=slave")
{
var url = "https://wx[number].qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg?&MsgID={0}&skey=%40crypt_671d6fec_1cd01b65296c06ef559ae98b0646725a" + slave;
HttpWebRequest h = (HttpWebRequest)HttpWebRequest.Create( ReplaceHeaderKey( string.Format(url, MsgID)));
h.AllowAutoRedirect = false;
h.CookieContainer = cookieContainer;
h.Accept = "image/png,image/*;q=0.8,*/*;q=0.5";
HttpWebResponse r = (HttpWebResponse)h.GetResponse();
Image img = Image.FromStream(r.GetResponseStream());
r.Close();
return img;
}
void doStep7()
{
if (__7)
{
//https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r=1444004057053&skey=%40crypt_39864b32_c5aaad7d38892d44fde5da7e97b32e69&sid=iM3uR2da1I2t0Upy&uin=840648442&deviceid=e013657496826621&synckey=1_634979925%7C2_634981902%7C3_634981851%7C11_634981845%7C201_1444003994%7C1000_1443952994&_=1444003858911
//var url = "https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r={time}&skey={SKEY}&sid={SID}&uin={UIN}&deviceid={DeviceID}&synckey=1_634979925%7C2_634981902%7C3_634981851%7C11_634981845%7C201_1444003994%7C1000_1443952994&_=1444003858911
//var url = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid={SID}&r={time}&skey={SKEY}";
var url = "https://wx[number].qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid={SID}&skey={SKEY}&lang=zh_CN&pass_ticket={pass_ticket}";
HttpWebRequest h = (HttpWebRequest)HttpWebRequest.Create(ReplaceKey(url));
h.AllowAutoRedirect = false;
h.CookieContainer = cookieContainer;
h.Method = "POST";
h.Accept = "application/json, text/plain, */*";
h.ContentType = "application/json;charset=utf-8";
byte[] bs = Encoding.ASCII.GetBytes(ReplaceHeaderKey(@"{""BaseRequest"":{""Uin"":{UIN},""Sid"":""{SID}"",""Skey"":""{SKEY}"",""DeviceID"":""{DeviceID}""},""SyncKey"":{SyncKey},""rr"":{time}}"));
using (Stream reqStream = h.GetRequestStream())
{
reqStream.Write(bs, 0, bs.Length);
reqStream.Close();
}
HttpWebResponse r = (HttpWebResponse)h.GetResponse();
//var list = GetAllCookies(cookieContainer);
using (System.IO.StreamReader read = new System.IO.StreamReader(r.GetResponseStream()))
{
string value = read.ReadToEnd();
if (value.IndexOf("\"SyncKey\": ") == -1) throw new Exception("SyncKey 没有捕获到");
SyncKey = SubString(value.Replace("\r", "").Replace("\n", ""), "\"SyncKey\": ", "}]}");
SyncKey += "}]}";
//得到用户的消息
JavaScriptObject ret = JavaScriptConvert.DeserializeObject(value) as JavaScriptObject;
JavaScriptArray arr = ret["AddMsgList"] as JavaScriptArray;
foreach (JavaScriptObject obj in arr)
{
var content = obj["Content"].ToString().Replace("&gt;", ">").Replace("&lt;", "<").Replace("<br/>", "");
ShowMsg(content, obj);
//处理消息
DoMsg(content, obj, obj["MsgId"]+"");
}
}
r.Close();
}
}
void ShowMsg(string msg, JavaScriptObject obj = null)
{
DelegateFun.ExeControlFun(listBox1, new DelegateFun.delegateExeControlFun(delegate
{
//全部清除
if (listBox1.Items.Count > 3000) listBox1.Items.Clear();
Console.WriteLine("2=>" + msg);
listBox1.Items.Add(DateTime.Now + ">2=>" + msg);
if (obj != null)
{
var _FormUserName = obj["FromUserName"] + "";
var _ToUserName = obj["ToUserName"] + "";
var FormUserName = GetDIName(_FormUserName);
var ToUserName = GetDIName(_ToUserName);
listBox1.Items.Add(DateTime.Now + ">" + FormUserName + ">" + ToUserName + ":" + msg);
this.listBox1.TopIndex = this.listBox1.Items.Count - (int)(this.listBox1.Height / this.listBox1.ItemHeight);
}
//listBox1.
}));
}
/// <summary>
/// 给用户发送信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSend_Click(object sender, EventArgs e)
{
object user = lstBoxUser.SelectedItem;
if (user == null)
{
MessageBox.Show("请选择用户!");
return;
}
if (txtBoxMessage.Text == "")
{
MessageBox.Show("请输入信息!");
return;
}
string userid = user.ToString().Substring(user.ToString().LastIndexOf('>')+1);
SendMsg(userid, USER_INFO, txtBoxMessage.Text, false);
txtBoxMessage.Text = "";
}
public string USER_NICKNAME { get; set; }
private void btnGetUserList_Click(object sender, EventArgs e)
{
webwxgetcontact();
}
}
}
1
https://gitee.com/598853521/weixinHttpApi.git
git@gitee.com:598853521/weixinHttpApi.git
598853521
weixinHttpApi
weixinHttpApi
master

搜索帮助