先上图,看一看需要进行哪些项目的操作:
在项目的根目录或者特定的文件夹内,创建一个ashx文件(一般处理程序文件),如图
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain" ;
string postString = string .Empty;
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST" )
{
using (Stream stream = HttpContext.Current.Request.InputStream)
{
Byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, 0, (Int32)stream.Length);
postString = Encoding.UTF8.GetString(postBytes);
}
if (! string .IsNullOrEmpty(postString))
{
ResponseXML(postString); //返回给微信用户信息
}
///加载自定义菜单
string postData = "{" + "\r\n" ;
postData += "\"button\":[ " + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += "\"name\":\"简单查\"," + "\r\n" ;
postData += "\"sub_button\":[" + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"click\"," + "\r\n" ;
postData += " \"name\":\"我的薪资\", " + "\r\n" ;
postData += " \"key\":\"mypay\"" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"click\"," + "\r\n" ;
postData += " \"name\":\"天气预报\", " + "\r\n" ;
postData += " \"key\":\"tianqiyubao\"" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"view\"," + "\r\n" ;
postData += " \"name\":\"火车票查询\", " + "\r\n" ;
postData += " \"url\":\"http://www.deqiaohr.com.cn/*******.aspx\"" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"click\"," + "\r\n" ;
postData += " \"name\":\"开心一刻\", " + "\r\n" ;
postData += " \"key\":\"kaixinyixiao\"" + "\r\n" ;
postData += " }]" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{" + "\r\n" ;
postData += "\"name\":\"会员管理\", " + "\r\n" ;
postData += "\"sub_button\":[" + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"view\"," + "\r\n" ;
postData += " \"name\":\"会员注册\", " + "\r\n" ;
postData += " \"url\":\"http://www.deqiaohr.com.cn/****.aspx\"" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"view\"," + "\r\n" ;
postData += " \"name\":\"重置密码\", " + "\r\n" ;
postData += " \"url\":\"http://www.deqiaohr.com.cn/****.aspx\"" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"click\"," + "\r\n" ;
postData += " \"name\":\"修改资料\", " + "\r\n" ;
postData += " \"key\":\"updateMessage\"" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"click\"," + "\r\n" ;
postData += " \"name\":\"我的提问\", " + "\r\n" ;
postData += " \"key\":\"mywen\"" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"click\"," + "\r\n" ;
postData += " \"name\":\"联系客服\", " + "\r\n" ;
postData += " \"key\":\"PhoneSerices\"" + "\r\n" ;
postData += " }]" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{" + "\r\n" ;
postData += "\"name\":\"活动通知\"," + "\r\n" ;
postData += "\"sub_button\":[" + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"click\"," + "\r\n" ;
postData += " \"name\":\"近期活动\", " + "\r\n" ;
postData += " \"key\":\"yuangonghuodong\"" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"click\"," + "\r\n" ;
postData += " \"name\":\"近期通知\", " + "\r\n" ;
postData += " \"key\":\"yuangongtongzhi\"" + "\r\n" ;
postData += "}," + "\r\n" ;
postData += "{ " + "\r\n" ;
postData += " \"type\":\"click\"," + "\r\n" ;
postData += " \"name\":\"有问必答\", " + "\r\n" ;
postData += " \"key\":\"youwenbida\"" + "\r\n" ;
postData += " }]" + "\r\n" ;
postData += "}]" + "\r\n" ;
postData += "}" + "\r\n" ;
//自定义菜单token的获取 是用 下面的两个参数 获取的 不能直接用 公众平台的token
string to = GetAccessToken();
//本人不喜欢 后台 json的操作 直接截取就可以了 得到的就是 token 或者 自己 获取 json的token
to = to.Substring(17, to.Length - 37);
//加载菜单
string i = GetPage( "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + to, postData);
}
else
{
Auth(); //微信接入的测试
}
}
/// <summary>
/// 获取通行证
/// </summary>
/// <returns></returns>
private string GetAccessToken()
{
string url_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=********&secret=*********" ;
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url_token);
myRequest.Method = "GET" ;
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
return content;
}
/// <summary>
/// 加载菜单项
/// </summary>
/// <param name="p"></param>
/// <param name="postData"></param>
/// <returns></returns>
private string GetPage( string p, string postData)
{
Stream outstream = null ;
Stream instream = null ;
StreamReader sr = null ;
HttpWebResponse response = null ;
HttpWebRequest request = null ;
Encoding encoding = Encoding.UTF8;
byte [] data = encoding.GetBytes(postData);
// 准备请求...
try
{
// 设置参数
request = WebRequest.Create(p) as HttpWebRequest;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true ;
request.Method = "POST" ;
request.ContentType = "application/x-www-form-urlencoded" ;
request.ContentLength = data.Length;
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string .Empty;
return content;
}
catch (Exception ex)
{
string err = ex.Message;
return string .Empty;
}
}
/// <summary>
/// 获取参数进行认证
/// </summary>
private void Auth()
{
string token = "*****" ; //你申请的时候填写的Token
string echoString = HttpContext.Current.Request.QueryString[ "echoStr" ];
string signature = HttpContext.Current.Request.QueryString[ "signature" ];
string timestamp = HttpContext.Current.Request.QueryString[ "timestamp" ];
string nonce = HttpContext.Current.Request.QueryString[ "nonce" ];
if (CheckSignature(token, signature, timestamp, nonce))
{
if (! string .IsNullOrEmpty(echoString))
{
HttpContext.Current.Response.Write(echoString);
HttpContext.Current.Response.End();
}
}
}
/// <summary>
/// 对微信传入参数进行封装到数组,拼接字符串,进行加密操作
/// </summary>
/// <param name="token"></param>
/// <param name="signature"></param>
/// <param name="timestamp"></param>
/// <param name="nonce"></param>
/// <returns></returns>
private bool CheckSignature( string token, string signature, string timestamp, string nonce)
{
string [] ArrTmp = { token, timestamp, nonce }; //将参数放进数组
Array.Sort(ArrTmp); //对数组进行排序
string tmpStr = string .Join( "" , ArrTmp); //将数组进行拼接
///对拼接后的字符串进行加密操作
tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1" );
//转换成小写形式
tmpStr = tmpStr.ToLower();
//比对成功返回
if (tmpStr == signature)
{
return true ;
}
else
{
return false ;
}
}
|
以上就是关于asp.net微信开发的第一篇,针对开发者接入进行学习,之后会有更新更多关于asp.net微信开发的文章,希望大家持续关注。