首页 > 代码库 > .NET微信模拟登录及{base_resp:{ret:-4,err_msg:nvalid referrer}}的解决办法
.NET微信模拟登录及{base_resp:{ret:-4,err_msg:nvalid referrer}}的解决办法
12年的时候写了些关于微信开发的内容,当时看好这个东西,可惜当时腾讯开放的权限太少,之后的一年多时间没有太关注了。
现在又要重新开始微信开发的阵容了,微信只是个入口,微网站才是趋势。
我是个水货,所以写的都是比较入门的,给初学者点启发用的。
这里有3个文件,一个页面展示(不贴代码了,就两个文本框和提交按钮)和后台代码,一个方法类,一个实体类
后台代码
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | protected void btnConfirm_Click( object sender, EventArgs e) { string name = txtName.Text; string pass = 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 | public static bool ExecLogin( string name, string pass) { bool result = false ; string password = GetMd5Str32(pass).ToUpper(); string padata = http://www.mamicode.com/ "username=" + name + "&pwd=" + password + "&imgcode=&f=json" ; string url = "https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN" ;//请求登录的URL try { CookieContainer cc = new CookieContainer(); //接收缓存 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 = new StreamReader(response2.GetResponseStream(), Encoding.Default); string text2 = sr2.ReadToEnd(); HttpContext.Current.Response.Write( "text2:" + text2 + "<br/>" ); //此处用到了newtonsoft来序列化 WeiXinRetInfo retinfo = Newtonsoft.Json.JsonConvert.DeserializeObject<WeiXinRetInfo>(text2); string token = string .Empty; if (retinfo.redirect_url != null && retinfo.redirect_url.Length > 0) { token = retinfo.redirect_url.Split( new char [] { ‘&‘ })[2].Split( new char [] { ‘=‘ })[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); } return result; } |
实体类
?
1 2 3 4 5 6 7 8 9 10 11 | public class WeiXinRetInfo //网络上是另一个版本,微信更新后换结构了 { public base_resp base_resp { get ; set ; } public string redirect_url { get ; set ; } } public class base_resp { public string ret { get ; set ; } public string err_msg { get ; set ; } } |
这样就完成了微信的模拟登录~ 接下来的其他步骤如获取登陆用户信息,群发信息之类的如果遇到问题再记录,没问题的话不更新了。
参考文章
http://bbs.csdn.net/topics/390670160
http://www.cnblogs.com/dyllove98/p/3165814.html
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。