zoukankan      html  css  js  c++  java
  • .NET微信公众号开发系列

    在下目前已经无力吐槽签名算法这事了,现在贴上自己写的代码。希望可以节省各位同学的实际开发以及阅读开发文档的时间。

    当然主要的还是阅读官方开发文档的时间,反正在下不再想看见那些东西。

    PS:对于本人写的代码,请尽管在评论里喷,谁知道我会不会回呢。

    首先,.NET开发的同学可以使用 SortedDictionary<string, object>保存需要签名的键值对,添加进的数据会根据 key自动排序。

            /// <summary>
            /// 获取Dictionary
            /// </summary>
            public SortedDictionary<string, object> DataDictionary { get; }

    其他方法:

            /// <summary>
            /// Dictionary格式转化成url参数格式
           
    /// </summary>
            /// <returns>url格式串, 该串不包含sign字段值</returns>
            public string ToUrl()
            {
              
    var buff = "";
              
    foreach (var pair in DataDictionary)
                {
                  
    if (pair.Value == null)
                       throw new WxPayException("ToUrl WxPayData内部含有值为null的字段!");
                  
                  
    if (pair.Key != "sign" && pair.Value.ToString() != "")
                        buff
    += pair.Key + "=" + pair.Value + "&";
                }
              

              
    return buff.Trim('&');
            }

    MD5签名:

    /// <summary>
            /// 生成签名,详见签名生成算法
            /// </summary>
            /// <returns>签名, sign字段不参加签名</returns>
            public string Sign()
            {
                //转url格式
                  var str = ToUrl();
    
    //在string后加入API KEY
                str += "&key=" + _wxPayConfig.KEY;
                
    //MD5加密
                  var md5 = MD5.Create();
                var bs = md5.ComputeHash(str.ToBytes(Encoding.UTF8));
                var sb = new StringBuilder();
                foreach (byte b in bs)
                {
                    sb.Append(b.ToString("x2"));
                }
    
    //所有字符转为大写
                  return sb.ToString().ToUpper();
            }

    SHA1签名:

    public string Sha1Sign()
    {
        //转url格式
         var str = ToUrl();
    
    //sha1加密
         var sha1 = SHA1.Create();
        var bs = sha1.ComputeHash(str.ToBytes(Encoding.UTF8));
        var sb = new StringBuilder();
        foreach (var b in bs)
        {
            sb.AppendFormat("{0:x2}", b);
        }
    
    //所有字符转为大写
        return sb.ToString().ToLower();
    }
  • 相关阅读:
    python发送邮件
    常用的排序算法
    关于前端ajax请求url为何添加一个随机数
    RabbitMQ消息队列
    shell编程基本语法和变量
    第70课 展望:未来的学习之路(完结)
    第69课 技巧:自定义内存管理
    第68课 拾遗:让人迷惑的写法
    第67课 经典问题解析五
    第66课 C++中的类型识别
  • 原文地址:https://www.cnblogs.com/Currention/p/5169830.html
Copyright © 2011-2022 走看看