频道栏目
首页 > 资讯 > 微信公众平台开发 > 正文

.NET微信公众号开发系列 - 签名算法

16-02-04        来源:[db:作者]  
收藏   我要投稿

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

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

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

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

        /// 
        /// 获取Dictionary
        /// 
        public SortedDictionary DataDictionary { get; }

其他方法:

        ///


        /// Dictionary格式转化成url参数格式
        ///

        /// url格式串, 该串不包含sign字段值
        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签名:

/// 
        /// 生成签名,详见签名生成算法
        /// 
        /// 签名, sign字段不参加签名
        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();
}

相关TAG标签
上一篇:跨境电商如何通过腾讯财付通将支付信息发往海关?
下一篇:站长运营地方网站的经验总结
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站