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


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

    进入接口开发:

      

     /// <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();
            
           //参数排序 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加密:

     /// <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 t in data)
                {
                    sb.Append(t.ToString("X2"));
                }
    
                return sb.ToString();
            }
    

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

  • 相关阅读:
    2019年8月7日 封装 7夕快乐
    2019年8月4日 多态 苗苗苗苗苗
    2019年7月31日 选课系统
    字符串类型的输入输出
    getline()函数的使用
    出栈序列统计
    因式分解
    质数
    多项式求和
    回文数字
  • 原文地址:https://www.cnblogs.com/siaslfslovewp/p/10675790.html
Copyright © 2020-2023  润新知