C# 通用签名工具

最近在做一个功能需要用到签名,看了一下之前已有的签名写法代码量太多了,于是想着是不是可以把对象转成 Dictionary,然后直接生成签名不就可以少写很多代码吗?于是说干就干,在查了相关资料参考了别人的代码之后,我写了这些代码。

我们先来看一下调用的对比,这是之前的:

 这是之后的:

通过对比我们看到节省了很多代码,而且对象属性越多,使用签名工具类的优势越明显,废话不多说,我们直接看代码:

/// <summary>
/// 将对象属性转换为字典
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static SortedDictionary<String, Object> ObjectToDictionary(Object obj)
{
    SortedDictionary<String, Object> dic = new SortedDictionary<string, object>();

    Type t = obj.GetType();

    PropertyInfo[] pi = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);

    foreach (PropertyInfo p in pi)
    {
        MethodInfo mi = p.GetGetMethod();

        if (mi != null && mi.IsPublic)
        {
            dic.Add(p.Name, mi.Invoke(obj, new Object[] { }));
        }
    }

    return dic;
}
/// <summary>
/// 组装待签名字符串
/// </summary>
/// <param name="m_values"></param>
/// <returns></returns>
private static string ToUrl(SortedDictionary<string, object> m_values)
{
    string buff = "";
    foreach (KeyValuePair<string, object> pair in m_values)
    {
        if (pair.Value == null)
        {
            SysLogHelper.Error("创建签名错误", "字典内部含有值为null的字段!");
            return "";
        }

        if (pair.Key != "sign" && pair.Value.ToString() != "")
        {
            buff += pair.Key + "=" + pair.Value + "&";
        }
    }
    buff = buff.Trim('&');
    return buff;
}
/// <summary>
/// 创建签名
/// </summary>
/// <param name="m_values"></param>
/// <returns></returns>
public static string MakeSign(SortedDictionary<string, object> m_values)
{
    //转url格式
    string str = ToUrl(m_values);
    //在string后加入API KEY
    str += "&key=" + ConfigHelper.GetStringValue("secretKey");
    var md5 = MD5.Create();
    var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
    var sb = new StringBuilder();
    foreach (byte b in bs)
    {
        sb.Append(b.ToString("x2"));
    }
    //所有字符转为大写
    return sb.ToString().ToUpper();
}

签名工具类可用于对接微信支付和微信 JSSDK等业务生成签名。

 好了,今天的分享就到这里了,如果你觉得我的文章对你有帮助欢迎转评赞三连,咱们下次再会。

资料参考:

微信支付官方 SDK C# 版

https://blog.csdn.net/chanball/article/details/83370531

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值