/// <summary>
        /// 请求API接口
        /// </summary>
        /// <param name="token">访问令牌</param>
        /// <param name="action">接口名称</param>
        /// <param name="parms">接口参数</param>
        /// <returns></returns>
        public ElemeApiRetModel CallApi(string token, string action, Dictionary <string, object> parms)
        {
            ElemeApiRetModel apiRetVal = null;

            parms = parms ?? new Dictionary <string, object>();

            try
            {
                //构建接口公用参数
                var m = new Dictionary <string, object>();
                m.Add("app_key", ConfigUtil.EleAppKey);
                m.Add("timestamp", TimeUtil.SecondTicks_1970);

                //构建接口参数
                var p = new SortedDictionary <string, object>();
                p.Add("nop", ElemeConsts.API_VER);
                p.Add("id", StringUtil.GuidStr());
                p.Add("action", action);
                p.Add("token", token);
                p.Add("metas", m);
                p.Add("params", parms);

                //构建接口签名参数并签名
                var sa = new SortedDictionary <string, object>();
                foreach (var cm in m)
                {
                    sa.Add(cm.Key, cm.Value);
                }
                if (parms != null && parms.Count > 0)
                {
                    foreach (var pm in parms)
                    {
                        sa.Add(pm.Key, pm.Value);
                    }
                }
                p.Add("signature", SignUtil.GetEleSign(sa, ConfigUtil.EleAppSecret, true, action, token));

                //执行接口请求并处理返回信息
                var responseText = HttpRequestUtil.HttpPost(ElemeConsts.GET_API_URL, p.ToJson(), true);
                if (!string.IsNullOrWhiteSpace(responseText))
                {
                    apiRetVal = JsonUtil.ToObject <ElemeApiRetModel>(responseText);
                    if (apiRetVal == null || apiRetVal.error != null)
                    {
                        LogUtil.Error(string.Format("返回错误信息:{0},请求参数:{1}", responseText, p.ToJson()));
                    }
                    else
                    {
                        LogUtil.Info(string.Format("调用接口:{0},成功返回信息:{1}", action, responseText));
                    }
                }
                else
                {
                    LogUtil.Error(string.Format("返回信息为空,请求参数:{0}", parms.ToJson()));
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error(string.Format("请求接口失败,参考信息:{0}", ex.Message));
            }

            return(apiRetVal);
        }