12年的时候写了些关于微信开发的内容,当时看好这个东西,可惜当时腾讯开放的权限太少,之后的一年多时间没有太关注了。
现在又要重新开始微信开发的阵容了,微信只是个入口,微网站才是趋势。
我是个水货,所以写的都是比较入门的,给初学者点启发用的。
这里有3个文件,一个页面展示(不贴代码了,就两个文本框和提交按钮)和后台代码,一个方法类,一个实体类
后台代码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
protectedvoidbtnConfirm_Click(objectsender, EventArgs e)
{
stringname = txtName.Text;
stringpass = txtPass.Text;
if(WeiXinLogin.ExecLogin(name, pass))
{
Response.Write("登陆成功");
Response.Redirect("SendMessage.aspx");
}
else
{
Response.Write("登陆失败");
}
}
|
方法类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
publicstaticboolExecLogin(stringname, stringpass)
{
boolresult = false;
stringpassword = GetMd5Str32(pass).ToUpper();
stringpadata = "username="+ name + "&pwd="+ password + "&imgcode=&f=json";
stringurl = "https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN";//请求登录的URL
try
{
CookieContainer cc = newCookieContainer();//接收缓存
byte[] byteArray = Encoding.UTF8.GetBytes(padata); // 转化
HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(url); //新建一个WebRequest对象用来请求或者响应url
webRequest2.CookieContainer = cc; //保存cookie
webRequest2.Method = "POST"; //请求方式是POST
webRequest2.ContentType = "application/x-www-form-urlencoded"; //请求的内容格式为application/x-www-form-urlencoded
webRequest2.Referer = "https://mp.weixin.qq.com/";//request的referer地址,网络上的版本因为这句没写所以会出现invalid referrer
webRequest2.ContentLength = byteArray.Length;
Stream newStream = webRequest2.GetRequestStream(); //返回用于将数据写入 Internet 资源的 Stream。
// Send the data.
newStream.Write(byteArray, 0, byteArray.Length); //写入参数
newStream.Close();
HttpWebResponse response2 = (HttpWebResponse)webRequest2.GetResponse();
StreamReader sr2 = newStreamReader(response2.GetResponseStream(), Encoding.Default);
stringtext2 = sr2.ReadToEnd();
HttpContext.Current.Response.Write("text2:"+ text2 + "<br/>");
//此处用到了newtonsoft来序列化
WeiXinRetInfo retinfo = Newtonsoft.Json.JsonConvert.DeserializeObject<WeiXinRetInfo>(text2);
stringtoken = string.Empty;
if(retinfo.redirect_url != null&& retinfo.redirect_url.Length > 0)
{
token = retinfo.redirect_url.Split(newchar[] { ‘&‘})[2].Split(newchar[] { ‘=‘})[1].ToString();//取得令牌
LoginInfo.LoginCookie = cc;
LoginInfo.CreateDate = DateTime.Now;
LoginInfo.Token = token;
result = true;
}
}
catch(Exception ex)
{
HttpContext.Current.Response.Write("ex:"+ ex.ToString());
//throw new Exception(ex.StackTrace);
}
returnresult;
}
|
实体类

|
1
2
3
4
5
6
7
8
9
10
11
|
publicclassWeiXinRetInfo//网络上是另一个版本,微信更新后换结构了
{
publicbase_resp base_resp { get; set; }
publicstringredirect_url { get; set; }
}
publicclassbase_resp
{
publicstringret { get; set; }
publicstringerr_msg { get; set; }
}
|
这样就完成了微信的模拟登录~ 接下来的其他步骤如获取登陆用户信息,群发信息之类的如果遇到问题再记录,没问题的话不更新了。
参考文章
http://bbs.csdn.net/topics/390670160
http://www.cnblogs.com/dyllove98/p/3165814.html
.NET微信模拟登录及{base_resp:{ret:-4,err_msg:nvalid referrer}}的解决办法,布布扣,bubuko.com