服务器之家

服务器之家 > 正文

微信公众平台开发之认证"成为开发者".Net代码解析

时间:2020-01-16 15:21     来源/作者:hechurui

.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
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
const string Token = "XXXXX";//你的token
protected void Page_Load(object sender, EventArgs e)
{
  string postStr = "";
  if (Request.HttpMethod.ToLower() == "post")
  {
    System.IO.Stream s = System.Web.HttpContext.Current.Request.InputStream;
    byte[] b = new byte[s.Length];
    s.Read(b, 0, (int)s.Length);
    postStr = System.Text.Encoding.UTF8.GetString(b);
    if (!string.IsNullOrEmpty(postStr))
    {
      //ResponseMsg(postStr);
      Response.Write(ResponseMsg(postStr));
      Response.End();
    }
   //WriteLog("postStr:" + postStr);
  }
  else
  {
    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 == signature)
  {
    return true;
  }
  else
  {
    return false;
  }
}
.private void Valid()
{
  string echoStr = Request.QueryString["echoStr"].ToString();
  if (CheckSignature())
  {
    if (!string.IsNullOrEmpty(echoStr))
    {
      Response.Write(echoStr);
      Response.End();
    }
  }
}   
 
/// <summary>
/// 写日志(用于跟踪)
/// </summary>
private void WriteLog(string strMemo)
{
  string filename = Server.MapPath("/logs/log.txt");
  if (!Directory.Exists(Server.MapPath("//logs//")))
    Directory.CreateDirectory("//logs//");
  StreamWriter sr = null;
  try
  {
    if (!File.Exists(filename))
    {
      sr = File.CreateText(filename);
    }
    else
    {
      sr = File.AppendText(filename);
    }
    sr.WriteLine(strMemo);
  }
  catch
  {
 
  }
  finally
  {
    if (sr != null)
      sr.Close();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
返回顶部