ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【小5聊】微信公众号开发系列之验证服务器有效性

2021-04-11 09:06:16  阅读:196  来源: 互联网

标签:nonce CheckInfoModel 微信 有效性 echostr signature 服务器 public string


【简述】

实际上就是在填写如下配置时,微信需要验证以下第三方服务器接口是否能够正常调用,后续所有微信api接口推送xml数据都是到这个接口

【验证代码】

1)获取参数

微信在调用第三方服务器接口时,会带上echostr、signature、timestamp、nonce参数

2)字典排序

将token, timestamp, nonce,这个三个变量进行字典排序

sha1加密上面字典排序得到的加密字符串,然后喝微信带过来的参数signature对比,一致则表示通过,然后响应echostr即可 

3)可以将验证方法单独写,返回true和false来验证

  • 代码如下

看了下面的代码,有人就会问了,既然最后是输出echostr,那么我直接写个输出echostr不就得了,我的回答是的

那还要什么验证,目的就是验证消息的确来自微信服务器

//先验证通过再写业务逻辑代码 - 验证服务器有效性
public void Data()
{
    bool flag = CheckData();

    if (flag)
    {
        Response.Write(Request.QueryString["echostr"]);
        Response.End();

        //第一次配置填写URL验证通过后,将上面注释,在下面写自己的业务逻辑代码
    }
}

public bool CheckData()
{
    bool flag = false;

    try
    {
        CheckInfoModel CheckInfoModel = new CheckInfoModel();

        string echoStr = Request.QueryString["echostr"];
        CheckInfoModel.echostr = echoStr;

        string signature = Request.QueryString["signature"];
        string timestamp = Request.QueryString["timestamp"];
        string nonce = Request.QueryString["nonce"];
        string token = "weixin2021"; //自定义的那个token字符串

        CheckInfoModel.signature = signature;
        CheckInfoModel.timestamp = timestamp;
        CheckInfoModel.nonce = nonce;
        CheckInfoModel.token = token;

        string[] tmpArr = { token, timestamp, nonce };
        Array.Sort(tmpArr); //字典排序
        string arraystring = string.Join("", tmpArr);//将三个字符串组成一个字符串

        CheckInfoModel.arraystring = arraystring;
        string arraystringsha1 = FormsAuthentication.HashPasswordForStoringInConfigFile(arraystring, "SHA1");//进行sha1加密

        CheckInfoModel.arraystringsha1 = arraystringsha1;

        arraystringsha1 = arraystringsha1.ToLower();

        //加过密的字符串与微信发送的signature进行比较,一样则通过微信验证,否则失败。
        if (arraystringsha1 == signature)
        {
            flag = true;
        }
    }
    catch(Exception ex)
    {

    }
    finally
    {
           /*
            {
            "signature":"ea66e58266edf2e640b1aacfb6a6cb8bf20e7847",
            "timestamp":"1618101663",
            "nonce":"143865222",
            "token":"weixin2021",
            "echostr":"1241980243149020575",
            "arraystring":"1438652221618101663weixin2021",
            "arraystringsha1":"EA66E58266EDF2E640B1AACFB6A6CB8BF20E7847"
        }
            */
    }

    return flag;
}

public class CheckInfoModel
{
    public string signature { get; set; }
    public string timestamp { get; set; }
    public string nonce { get; set; }
    public string token { get; set; }
    public string echostr { get; set; }
    public string arraystring { get; set; }
    public string arraystringsha1 { get; set; }
}

标签:nonce,CheckInfoModel,微信,有效性,echostr,signature,服务器,public,string
来源: https://blog.csdn.net/lmy_520/article/details/115587948

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有