• .NET微信模拟登录及{base_resp:{ret:-4,err_msg:nvalid referrer}}的解决办法


    12年的时候写了些关于微信开发的内容,当时看好这个东西,可惜当时腾讯开放的权限太少,之后的一年多时间没有太关注了。

    现在又要重新开始微信开发的阵容了,微信只是个入口,微网站才是趋势。

    我是个水货,所以写的都是比较入门的,给初学者点启发用的。

    这里有3个文件,一个页面展示(不贴代码了,就两个文本框和提交按钮)和后台代码,一个方法类,一个实体类

    后台代码

        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("登陆失败");
            }
        }

    方法类

    public static bool ExecLogin(string name, string pass)
        {
            bool result = false;
            string password = GetMd5Str32(pass).ToUpper();
            string padata = "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;
        }

    实体类

    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

  • 相关阅读:
    注册表修改大全(浏览文章时可以使用CTRL+F查找)
    怎样彻底删除系统服务项
    Linux查看文件编码格式及文件编码转换
    使用回收站主键名、索引名问题
    Aix5.3安装Bash Shell环境
    让AIX下的sqlplus也支持回显功能
    Oracle查看表空间使用率SQL脚本
    笔记本电脑内网、外网一起使用
    Oracle数据库为何出现乱码
    Oracle中varchar2(20)和varchar2(20 byte)区别
  • 原文地址:https://www.cnblogs.com/TivonStone/p/3700922.html
Copyright © 2020-2023  润新知