本文实例讲述了C#微信公众号与订阅号接口开发示例代码。分享给大家供大家参考,具体如下:
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
|
using System;
using System.Web;
using System.IO;
using System.Text;
using System.Web.Security;
using weixin_api;
public class wxgz_api : IHttpHandler
{
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);
Handle(postString);
}
}
else
{
//微信进行的Get测试(开发者认证)
WxAuth();
}
}
/// <summary>
/// 处理信息并应答
/// </summary>
private void Handle( string postStr)
{
messageHelp help = new messageHelp();
string responseContent = help.ReturnMessage(postStr);
HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
HttpContext.Current.Response.Write(responseContent);
}
#region 微信验证
public void WxAuth()
{
string token = "xxxxxxxx" ;
if ( string .IsNullOrEmpty(token))
{
return ;
}
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>
public 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 ;
}
}
#endregion
public bool IsReusable
{
get
{
return false ;
}
}
}
|
希望本文所述对大家C#程序设计有所帮助。