/// <summary> /// 参数有效性判断 /// </summary> /// <param name="parameter">系统参数.</param> /// <param name="messaage">消息.</param> /// <returns> /// Boolean /// </returns> /// <remarks> /// <list> /// <item><description>添加参数校验方法 added by Shaipe 2018/9/25</description></item> /// </list> /// </remarks> public static bool ValidParameter(SysParameter parameter, out string messaage) { if (string.IsNullOrEmpty(parameter.AppId)) { messaage = "缺少必须的Appid参数"; return(false); } if (!Constant.AppSecret.ContainsKey(parameter.AppId)) { messaage = "请求的参数错误AppId不正确"; return(false); } if (parameter.Timestamp == 0) { messaage = "缺少必须的Timestamp参数"; return(false); } if (string.IsNullOrEmpty(parameter.Sign)) { messaage = "缺少必须的Sign参数"; return(false); } if (string.IsNullOrEmpty(parameter.Method)) { messaage = "缺少必须的Method参数"; return(false); } messaage = ""; return(true); }
/// <summary> /// 对时间戳参数进行验证 /// </summary> /// <param name="parameter">The parameter.</param> /// <returns> /// Boolean /// </returns> /// <remarks> /// <list> /// <item><description>添加时间戳校验方法 added by xiepeng 2018/9/20</description></item> /// </list> /// </remarks> public static bool ValidTimestamp(SysParameter parameter) { bool ret = false; long currentStamp = Utils.GetTimstamp(); long absDiff = System.Math.Abs(currentStamp - parameter.Timestamp); // 请求的时间差为上下180秒以内 ret = (absDiff < 180); return(ret); }
/// <summary> /// 参数转为数字类型. /// </summary> /// <param name="para">参数.</param> /// <param name="key">关键字.</param> /// <returns></returns> public static decimal ToDecimal(this SysParameter para, string key) { decimal value = 0.00m; if (!para.IsNullOrEmpty(key)) { decimal.TryParse(para.Properties[key].ToString(), out value); } return(value); }
/// <summary> /// 参数格式化. /// </summary> /// <param name="para">参数.</param> /// <param name="key">关键字.</param> /// <returns></returns> public static string ToValue(this SysParameter para, string key) { string value = string.Empty; if (!para.IsNullOrEmpty(key)) { value = para.Properties[key].ToString(); } return(value); }
/// <summary> /// 返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。 /// </summary> /// <param name="para">查询参数.</param> /// <param name="key">关键字.</param> /// <param name="oparet">操作符.</param> /// <returns></returns> public static string[] Split(this SysParameter para, string key, char oparet) { string[] values = { }; if (!para.IsNullOrEmpty(key)) { values = para.Properties[key].ToString().Split(oparet); } return(values); }
/// <summary> /// 参数转为整数类型. /// </summary> /// <param name="para">参数.</param> /// <param name="key">关键字.</param> /// <returns></returns> public static int ToInt(this SysParameter para, string key, int defaultValue) { int value = defaultValue; if (!para.IsNullOrEmpty(key)) { int.TryParse(para.Properties[key].ToString(), out value); } return(value); }
/// <summary> /// 判断参数是否为空或者是否包含关键字. /// </summary> /// <param name="para">参数.</param> /// <param name="key">关键字.</param> /// <returns></returns> public static bool IsNullOrEmpty(this SysParameter para, string key) { bool result = true; if (para.Properties != null && !string.IsNullOrEmpty(key)) // by xp 添加对Key的空值进行判断 { if (para.Properties.ContainsKey(key) && !String.IsNullOrEmpty(para.Properties[key].ToString())) { result = false; } } return(result); }
/// <summary> /// 参数转换为布尔型. /// </summary> /// <param name="para">参数.</param> /// <param name="key">关键字.</param> /// <returns></returns> public static bool ToBool(this SysParameter para, string key) { if (para.Properties == null || !para.Properties.ContainsKey(key)) { return(false); } return(Utils.ToBool(para.Properties[key])); //bool value = false; //if (!para.IsNullOrEmpty(key)) //{ // bool.TryParse(para.Properties[key], out value); //} //return value; }
/// <summary> /// 转换为时间格式. /// </summary> /// <param name="parameter">The parameter.</param> /// <param name="key"></param> /// <returns>转换失败则为系统默认最小日期</returns> public static DateTime ToDateTime(this SysParameter para, string key) { DateTime dateTime = DateTime.MinValue; string dateTimeString = string.Empty; if (!para.IsNullOrEmpty(key)) { dateTimeString = para.Properties[key].ToString(); } DateTime.TryParse(HttpUtility.HtmlDecode(dateTimeString), out dateTime); return(dateTime); }
/// <summary> /// 獲取最后數據 /// </summary> /// <param name="para"></param> /// <param name="result"></param> /// <returns></returns> public static string GetContent(SysParameter para, object result) { string content = string.Empty; if (result is DataTable) { if (para.Format == FormatType.Json) { content = DBHelper.TableToJson(result as DataTable); } else { content = DBHelper.Table2Xml(result as DataTable); } } else if (result is IEntity) { if (para.Format == FormatType.Json) { content = (result as IEntity).ToJson(); } else { content = "<entity>" + (result as IEntity).ToXml() + "</entity>"; } } else { if (result == null) { result = ""; } if (para.Format == FormatType.Json) { content = "{\"result\":\"" + result.ToString() + "\"}"; } else { content = "<result>" + result.ToString() + "</result>"; } } return(content); }
/// <summary> /// 参数格式化为列表查询条件对象(解析的节点只包含:Fields、PageIndex、PageSize、Condition、Orderby、Groupby) by hfs 20160909 /// </summary> /// <param name="para"></param> /// <returns></returns> public static ListQuery ToListQuery(this SysParameter para) { XmlDocument orderby = new XmlDocument(); orderby.LoadXml("<Orderby>" + (!string.IsNullOrEmpty(para.ToValue("Orderby")) ? para.ToValue("Orderby") : "") + "</Orderby>"); XmlDocument condition = new XmlDocument(); condition.LoadXml("<Condition>" + (!string.IsNullOrEmpty(para.ToValue("Condition")) ? para.ToValue("Condition") : "") + "</Condition>"); ListQuery query = new ListQuery { Fields = para.ToValue("Fields"), Condition = Condition.Collection(condition), Orderby = Orderby.Collection(orderby), Groupby = para.ToValue("Groupby") }; return(query); }
/// <summary> /// 验证签名,防止参数被修改 /// </summary> /// <returns>Boolean</returns> /// <remarks> /// <list> /// <item><description>代码梳理 added by xiepeng 2018/9/20</description></item> /// </list> /// </remarks> public static bool ValidSign(SysParameter parameter) { bool ret = false; // 1. 根据appid获取出对应的Secret string secret = Constant.AppSecret[parameter.AppId]; Dictionary <string, string> dic = parameter.RequestContent.ToDictionary(); if (dic != null) { Dictionary <string, string> sortDic = dic.SortFilter(new string[] { "sign", "secret" }); string sign = ECF.Security.Encrypt.MD532(sortDic.ToLinkString() + "&secret=" + secret); // 3. 对比签名有效性 ret = (sign == parameter.Sign); } return(ret); }
/// <summary> /// 参数转换为XML. /// </summary> /// <param name="parameter">The parameter.</param> /// <returns></returns> public static XmlDocument ToXml(this SysParameter parameter) { if (parameter.Properties == null) { parameter.Properties = new Dictionary <string, object>(); } var xmlDoc = new XmlDocument(); var sb = new StringBuilder(); sb.Append("<root>"); foreach (var property in parameter.Properties) { sb.Append("<" + property.Key + ">" + property.Value + "</" + property.Key + ">"); } sb.Append("</root>"); xmlDoc.LoadXml(sb.ToString()); return(xmlDoc); }
/// <summary> /// 参数格式化为分页查询条件对象(解析的节点只包含:Fields、SumFields、PageIndex、PageSize、Condition、Orderby、Groupby) by hfs 20160909 /// </summary> /// <param name="para"></param> /// <returns></returns> public static PagingQuery ToPagingQuery(this SysParameter para) { XmlDocument orderby = new XmlDocument(); orderby.LoadXml("<Orderby>" + (!string.IsNullOrEmpty(para.ToValue("Orderby")) ? para.ToValue("Orderby") : "") + "</Orderby>"); XmlDocument condition = new XmlDocument(); condition.LoadXml("<Condition>" + (!string.IsNullOrEmpty(para.ToValue("Condition")) ? para.ToValue("Condition") : "") + "</Condition>"); PagingQuery query = new PagingQuery { Fields = para.ToValue("Fields"), SumFields = para.ToValue("SumFields"), PageIndex = para.ToInt("PageIndex", 1), PageSize = para.ToInt("PageSize", 10), Condition = Condition.Collection(condition), Orderby = Orderby.Collection(orderby), Groupby = para.ToValue("Groupby") }; return(query); }
/// <summary> /// 转换为键值对. /// </summary> /// <param name="parameter">The parameter.</param> /// <returns></returns> public static Dictionary <string, object> ToDictionary(this SysParameter parameter) { Dictionary <string, object> dictionary = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); if (parameter.Properties == null) { return(dictionary); } foreach (var property in parameter.Properties) { if (!dictionary.ContainsKey(property.Key)) { dictionary.Add(property.Key, property.Value); } else { dictionary[property.Key] = property.Value; } } return(dictionary); }
public static IResultResponse VerifyAccessToken(SysParameter para) { string token = para.ToValue("AccessToken"); //解析Token AccessToken tokenEnt = AccessToken.ParseToken(token); if (tokenEnt == null || tokenEnt.SellerId <= 0 || tokenEnt.DBId <= 0 ) { return(ResultResponse.ExceptionResult("Token无效", "", 4004)); } // 判断token有效期 if (Utils.ToUnixTime(DateTime.Now) > tokenEnt.Expired) { return(ResultResponse.ExceptionResult("Token已过期", "", 4004)); } return(ResultResponse.GetSuccessResult(tokenEnt)); }
/// <summary> /// 解析开放平台参数 /// </summary> /// <param name="requestString">查询字符串</param> /// <returns></returns> public static SysParameter ParseOpenApiParameter(string requestString) { SysParameter sysPara = new SysParameter(); Regex reParameter = new Regex(@"(?<paraKey>[^=|^&]+)=(?<paraValue>[^\&|$]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline); Regex reSpace = new Regex(@"[\s]*", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline); requestString = reSpace.Replace(requestString, String.Empty); string paraKey = null, paraValue = null; foreach (Match m in reParameter.Matches(requestString)) { paraKey = HttpUtility.UrlDecode(m.Groups["paraKey"].Value); paraValue = HttpUtility.UrlDecode(m.Groups["paraValue"].Value); // 签名数据 if (String.Compare("sign", paraKey, StringComparison.OrdinalIgnoreCase) == 0) { sysPara.Sign = paraValue; } // 请求时间戳 else if (String.Compare("timestamp", paraKey, StringComparison.OrdinalIgnoreCase) == 0) { long tstamp = 0; long.TryParse(paraValue, out tstamp); sysPara.Timestamp = tstamp; } // 版本号 else if (String.Compare("v", paraKey, StringComparison.OrdinalIgnoreCase) == 0) { sysPara.Version = paraValue; } // 应用key else if (String.Compare("appid", paraKey, StringComparison.OrdinalIgnoreCase) == 0) { sysPara.AppId = paraValue; } // 请求的方法 else if (String.Compare("method", paraKey, StringComparison.OrdinalIgnoreCase) == 0) { sysPara.Method = paraValue.ToLower(); } // 商户id else if (String.Compare("partnerid", paraKey, StringComparison.OrdinalIgnoreCase) == 0) { sysPara.PartnerId = paraValue; } // 入驻商家Id else if (String.Compare("storeid", paraKey, StringComparison.OrdinalIgnoreCase) == 0) { sysPara.StoreId = Utils.ToInt(paraValue); } // 获取外键id else if (String.Compare("fkid", paraKey, StringComparison.OrdinalIgnoreCase) == 0) { sysPara.FKId = Utils.ToInt(paraValue); } else if (String.Compare("accessToken", paraKey, StringComparison.OrdinalIgnoreCase) == 0) { sysPara.AccessToken = Utils.ToString(paraValue); } // 返回数据格式 else if (String.Compare("format", paraKey, StringComparison.OrdinalIgnoreCase) == 0) { if (String.Compare(paraValue, "json", StringComparison.OrdinalIgnoreCase) == 0) { sysPara.Format = FormatType.Json; } else if (String.Compare(paraValue, "xml", StringComparison.OrdinalIgnoreCase) == 0) { sysPara.Format = FormatType.Xml; } else if (String.Compare(paraValue, "binary", StringComparison.OrdinalIgnoreCase) == 0) { sysPara.Format = FormatType.Binary; } } //else //{ if (sysPara.Properties == null) { sysPara.Properties = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); } if (!sysPara.Properties.ContainsKey(paraKey)) { sysPara.Properties.Add(paraKey, paraValue); } else { new Exceptions("接收的参数中有相同的参数,参数名为:" + paraKey, "Ops"); } //} } return(sysPara); }
/// <summary> /// Converts the string representation of a number to an integer. /// </summary> /// <param name="para">The para.</param> /// <param name="key">The key.</param> /// <returns> /// Int32 /// </returns> /// <remarks> /// <list> /// <item><description>说明原因 added by xiepeng 2018/9/20</description></item> /// </list> /// </remarks> public static int ToInt(this SysParameter para, string key) { return(ToInt(para, key, 0)); }