前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【干货】C#根据类生成签名字符串(附DEMO下载地址)

【干货】C#根据类生成签名字符串(附DEMO下载地址)

作者头像
Vaccae
发布2019-07-25 11:15:01
9200
发布2019-07-25 11:15:01
举报
文章被收录于专栏:微卡智享微卡智享

前言

现在第三方支付的接口签名机制都是模仿微信签名方式,把参数按ascii码进行排序后再加上key进行md5的加密,前两天因为做Delphi的接口,所以写了一篇《Delphi对TStrings进行排序》,这次我们写一个C#把类结构生成的签名字符串。

视频效果

视频内容

核心代码


代码语言:javascript
复制
       /// <summary>
        /// 获取签名
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <param name="otype">0-不排序 1-按名称ASCII排序</param>
        /// <returns></returns>
        public string GetSign<T>(T t, int otype=1)
        {
            string retstr = "";
  //定义PropertyInfo的List
            List<PropertyInfo> proplist = new List<PropertyInfo>();
  //遍历泛型类的每个属性加入到List里面
            Array.ForEach<PropertyInfo>(typeof(T).GetProperties(),
                p => proplist.Add(p));
 //根据参数进行排序 0-不排序  1-按名称ASCII码排序
            if (otype == 1)
                proplist = proplist.OrderBy(k => k.Name).ToList();

 //遍历List泛型生成我们要签名的字符串
            proplist.ForEach(p =>
            {
                retstr = retstr + p.Name + "=" + p.GetValue(t, null) + "&";
            });
  //把字符串最后一位截断
            retstr = retstr.Substring(0, retstr.Length - 1);
 //输出字符串
            return retstr;
        }

因为我们的类不同可以都传进来通用,所以我们用到了泛形,要读取每个类的属性和值我们又用到了PropertyInfo(这个的用法我们就不在这介绍了,大家可以搜一下),其实 PropertyInfo里的Name就是我们的类里属性的名称,GetValue就是我们获取的属性的值。

代码里的实现步骤:

  1. 定义生成的List<PropertyInfo>(new List<PropertyInfo>())
  2. 把传入进来的泛型类的属性生数组,然后再插入到我们的List里面(List.add())
  3. 根据输入的参数进行List属性名的排序(List.Orderby())
  4. 遍历我们的Listr属性和值进行字符串的拼接(List.Foreach())
  5. 输出字符串

代码编写

我们新建好一个C#的Winform程序,起名为ClassToSign,然后在里面新建了两个类,一个商品资料类,一个用户信息类

商品资料类

用户信息类

然后我们在Form窗体里面加入左边加入一个TextBox,起名为tbShow用于显示生成的结果,再设置商品资料和用户信息对应的输入文本框,加上两个生成的签名按钮

在Form1.cs里面先把我们转换的核心代码写进去

然后Button1事件写商品资料生成的方法

Button2写用户信息生成的方法

运行结果

DEMO下载地址

链接:https://pan.baidu.com/s/1UuPo7GV31ggKk6Ze4nHAWw 密码:wde8


-END-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档