.NET CORE 微信小程序消息验证的坑

进入微信小程序,点击开发-》选择消息推送-》扫码授权,填写必要参数

进入接口开发:

  

.NET CORE 微信小程序消息验证的坑
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
/// <summary>
       
/// 验证小程序
       
/// </summary>
       
/// <returns></returns>
       
[HttpGet(
"checksign"
)]
       
public 
dynamic CheckSignature()
       
{
           
/// 1、将token、timestamp、nonce三个参数进行字典序排序
           
/// 2、将三个参数字符串拼接成一个字符串进行sha1加密
           
/// 3、开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
           
var 
_signature = Request.Query[
"signature"
].ToString();
           
var 
_timestamp = Request.Query[
"timestamp"
].ToString();
           
var 
_nonce = Request.Query[
"nonce"
].ToString();
 
      <br>       
//参数排序
           
SortedDictionary<
string

string
> keyValuePairs = 
new 
SortedDictionary<
string

string
>();
           
keyValuePairs.Add(
"token"

"xxxxxxxx"
);  
//设定的token
           
keyValuePairs.Add(
"timestamp"
, _timestamp);
           
keyValuePairs.Add(
"_nonce"
, _nonce);
           
StringBuilder sb = 
new 
StringBuilder();
           
foreach 
(
var 
item 
in 
keyValuePairs)
           
{
               
sb.Append(item.Value);
           
}
           
var 
signature = StringHelper.Sha1(sb.ToString()).ToLower();  
//sha1加密,注意,必须是小写的
 
           
if 
(signature.Equals(_signature))
           
{
               
return 
Request.Query[
"echostr"
].ToString();  
//注意:坑,官方文档上提示返回true和false,其实返回的是echostr参数
           
}
           
else
           
{
               
return 
"非法請求"
;
           
}
       
}

  sha1加密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/// <summary>
       
/// 基于Sha1的自定义加密字符串方法:输入一个字符串,返回一个由40个字符组成的十六进制的哈希散列(字符串)。
       
/// </summary>
       
/// <param name="str">要加密的字符串</param>
       
/// <returns>加密后的十六进制的哈希散列(字符串)</returns>
       
public 
static 
string 
Sha1(
this 
string 
str)
       
{
           
var 
buffer = Encoding.UTF8.GetBytes(str);
           
var 
data = SHA1.Create().ComputeHash(buffer);
 
           
var 
sb = 
new 
StringBuilder();
           
foreach 
(
var 

in 
data)
           
{
               
sb.Append(t.ToString(
"X2"
));
           
}
 
           
return 
sb.ToString();
       
}

  然后把上述接口发布到服务器上,必须绑定域名,而且直接指定到对应的接口上,如:http://api.xylove.net/lee/WX/checksign

 

 
 

相关文章