.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 =
"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;
    
}

实体类

.NET微信模拟登录及{base_resp:{ret:-4,err_msg:nvalid referrer}}的解决办法
?
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

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