示例#1
0
        static void Main(string[] args)
        {
            var request = new GenenerateSignatureModel()
            {
                AppId     = "qd1bxdtroaf2bjpz",
                Secert    = "bq7l2yuvta7babisntweusta7qz3goea",
                Hash      = "md5",
                Timestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds,
                Version   = "2.0",
                BirthDate = DateTime.Now
            };
            var sigr = GenenerateSignature(request);

            Console.WriteLine(sigr);
            Console.Read();
        }
示例#2
0
        public static string GenenerateSignature(GenenerateSignatureModel requestModel)
        {
            var map = new Dictionary <string, object>
            {
                { nameof(requestModel.AppId), requestModel.AppId },
                { nameof(requestModel.Version), requestModel.Version },
                { nameof(requestModel.Timestamp), requestModel.Timestamp },
                { nameof(requestModel.Hash), requestModel.Hash },
                { nameof(requestModel.Secert), requestModel.Secert },
            };

            var formatMap = GetFormatsByType(requestModel.GetType());

            var signStr = map.OrderBy(o => o.Key, StringComparer.Ordinal)
                          .Aggregate(new StringBuilder(),
                                     (builder, pair) =>
            {
                var value = pair.Value;
                if (value != null && formatMap.ContainsKey(pair.Key))
                {
                    var format = "{0:" + formatMap[pair.Key] + "}";
                    value      = string.Format(format, value);
                }

                if (value == null)
                {
                    value = "";
                }

                return(builder.Append(LowerFirstCase(pair.Key))
                       .Append('=')
                       .Append(value));
            }).ToString();

            return(signStr.Hash().ToLower());
        }