[微信公众平台]ASP.NET版微信公众平台

一直感觉微信公众平台做的很粗糙,并且只提供了PHP版的示例代码,这实在是不爽;学.Net和Java出身的,对PHP开发实在是一头雾水!

那就先了解下微信提供的PHP示例代码吧(主要是验证)

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
< ?php
/**
* wechat php test
*/


//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();//验证通过后,把这里修改成 responseMsg() 即可实现自动回复

class wechatCallbackapiTest
{

public function valid()
{

$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}

public function responseMsg()
{

//回复消息的方法,此处忽略
}

private function checkSignature()
{

//获取微信服务器请求的加密签名
$signature = $_GET["signature"];
//获取到微信服务器的时间戳
$timestamp = $_GET["timestamp"];
//随机数
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
简单的验证算法
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}

?>

从上面我们可以看出,其实这个验证很简单,只要让 checkSignature() 方法返回True即可通过验证,那就开始动手修改成Asp.Net吧~

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
const string Token = "weixin";
/// <summary>
/// 接受微信请求处理
/// </summary>
/// <param name="sender"/>
/// <param name="e"/>
protected void Page_Load(object sender, EventArgs e)
{

Valid();
}

/// <summary>
/// 验证微信签名
/// </summary>
/// * 将token、timestamp、nonce三个参数进行字典序排序
/// * 将三个参数字符串拼接成一个字符串进行sha1加密
/// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
/// <returns></returns>
private bool CheckSignature()
{

string signature = Request.QueryString["signature"].ToString();
string timestamp = Request.QueryString["timestamp"].ToString();
string nonce = Request.QueryString["nonce"].ToString();
string[] ArrTmp = { Token, timestamp, nonce };
Array.Sort(ArrTmp);
string tmpStr = string.Join("", ArrTmp);
tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
tmpStr = tmpStr.ToLower();
if (tmpStr.Equals(signature))
{
return true;
}
else
{
return false;
}
}

/// <summary>
/// 微信签名验证
/// </summary>
private void Valid()
{

try
{
string echoStr = Request.QueryString["echoStr"].ToString();
if (CheckSignature())
{
if (!string.IsNullOrEmpty(echoStr))
{
Response.Write(echoStr);
Response.End();
}
}
}
catch
{
//Response.Redirect("../../index.php");
}
}

只要这样的改造,就可以轻松的通过微信的验证啦!