| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 | using Newtonsoft.Json.Linq;using PTMedicalInsurance.Common;using PTMedicalInsurance.Variables;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Text;using System.Threading.Tasks;namespace PTMedicalInsurance.Helper{    class InvokeRestCenter : IInvokeCenter    {        public int Business(string inputData, ref string outputData, ref string pErrMsg)        {            outputData = "";            pErrMsg = "";            JObject joRtn = new JObject();            try            {                Global.writeLog(string.Format("调用中心{0}接口入参:{1}", inputData, Global.curEvt.URL));                //创建一个HTTP请求                  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);                //Post请求方式                  request.Method = "POST";                //内容类型                request.ContentType = "application/json";                String stamp = TimeStamp.get13().ToString();                string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.LastIndexOf("/") + 1);                //if (apiName.Contains("4101A"))                //{                //    apiName = "h" + apiName;                //}                Global.writeLog(apiName);                //南昌增加头部信息                string sTemp = "_api_access_key=" + Global.inf.AK                         + "&_api_name=" + apiName                         + "&_api_timestamp=" + stamp                         + "&_api_version=" + "1.0.0";                string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);                request.Headers.Add("_api_version", "1.0.0");                request.Headers.Add("_api_timestamp", stamp);                request.Headers.Add("_api_name", apiName);                request.Headers.Add("_api_signature", signature);                request.Headers.Add("_api_access_key", Global.inf.AK);                //设置参数,并进行URL编码                 string paraUrlCoded = inputData;//System.Web.HttpUtility.UrlEncode(jsonParas);                   byte[] payload;                //将Json字符串转化为字节                  payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);                //设置请求的ContentLength                   request.ContentLength = payload.Length;                //发送请求,获得请求流                 Stream writer;                writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象                                                    //将请求参数写入流                writer.Write(payload, 0, payload.Length);                writer.Close();//关闭请求流                HttpWebResponse response = null;                try                {                    //获得响应流                    response = (HttpWebResponse)request.GetResponse();                }                catch (WebException ex)                {                    HttpWebResponse res = (HttpWebResponse)ex.Response;                    Stream myResponseStream = res.GetResponseStream();                    StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);                    string retString = myStreamReader.ReadToEnd();                    outputData = JsonHelper.setExceptionJson(-99, "异常返回", retString).ToString();                    return -1;                }                outputData = getResponseData(response);                Global.writeLog("原始数据返回:"+outputData);                joRtn = JObject.Parse(outputData);//返回Json数据                if (joRtn.ContainsKey("body"))                {                    joRtn = (JObject)joRtn.GetValue("body");                    outputData = JsonHelper.toJsonString(joRtn);                }                return 0;            }            catch (Exception ex)            {                joRtn.Add("infcode", -1);                joRtn.Add("err_msg", "调用中心服务异常invokeCenterService(1):" + ex.Message);                outputData = JsonHelper.toJsonString(joRtn);                 return -1;            }        }        public int BusinessExt(string inputData, ref string outputData, ref string pErrMsg)        {            return this.Business(inputData, ref outputData, ref pErrMsg);        }        public int DownloadFile(string inputData, ref string outputData)        {            outputData = "";            string error = string.Empty; int errorCode = 0;            try            {                JObject jsonInParam = JObject.Parse(inputData);                // 去除外wrapper层便于通用                Utils.removeWrapper(jsonInParam);                string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"];                string filePath = Global.curEvt.path + "\\Download\\" + fileName;                //如果不存在目录,则创建目录                if (!Directory.Exists(Global.curEvt.path + "\\Download"))                {                    //创建文件夹                    DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\Download");                }                if (File.Exists(filePath))                {                    File.Delete(filePath);                }                FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);                //创建一个HTTP请求                  Global.curEvt.URL = Global.inf.centerURL + "/hsa-fsi-9102";                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);                //Post请求方式                  request.Method = "POST";                String stamp = TimeStamp.get13().ToString();                string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.Length - 12);                //南昌增加头部信息                string sTemp = "_api_access_key=" + Global.inf.AK                         + "&_api_name=" + apiName                         + "&_api_timestamp=" + stamp                         + "&_api_version=" + "1.0.0";                string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);                //内容类型                request.ContentType = "application/json";                request.Headers.Add("_api_version", "1.0.0");                request.Headers.Add("_api_timestamp", stamp);                request.Headers.Add("_api_name", apiName);                request.Headers.Add("_api_signature", signature);                request.Headers.Add("_api_access_key", Global.inf.AK);                //设置参数,并进行URL编码                 string paraUrlCoded = JsonHelper.toJsonString(jsonInParam);                byte[] payload;                //将Json字符串转化为字节                  payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);                //设置请求的ContentLength                   request.ContentLength = payload.Length;                Stream writer;                try                {                    writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象                }                catch (Exception)                {                    writer = null;                    errorCode = -100;                    error = "连接服务器失败!";                }                //将请求参数写入流                writer.Write(payload, 0, payload.Length);                writer.Close();//关闭请求流                               // String strValue = "";//strValue为http响应所返回的字符流                               //发送请求并获取相应回应数据                HttpWebResponse response = request.GetResponse() as HttpWebResponse;                //直到request.GetResponse()程序才开始向目标网页发送Post请求                Stream responseStream = response.GetResponseStream();                //创建本地文件写入流                byte[] bArr = new byte[1024];                int iTotalSize = 0;                int size = responseStream.Read(bArr, 0, (int)bArr.Length);                while (size > 0)                {                    iTotalSize += size;                    fs.Write(bArr, 0, size);                    size = responseStream.Read(bArr, 0, (int)bArr.Length);                }                fs.Close();                responseStream.Close();                dynamic joReturn = new JObject();                joReturn.errorCode = errorCode;                joReturn.errorMessage = error;                joReturn.filePath = filePath;                outputData = joReturn.ToString();            }            catch (Exception ex)            {                errorCode = -100;                error = ex.Message;                dynamic joReturn = new JObject();                joReturn.errorCode = errorCode;                joReturn.errorMessage = error;                outputData = joReturn.ToString();                return -1;            }            finally            {                Global.writeLog("DownloadCenterFile" + "(" + Global.curEvt.URL + ")", inputData, outputData);            }            return 0;        }        public int Init(ref string pErrMsg)        {            return 0;        }        public int UploadFile(string inputData, ref string outputData, ref string pErrMsg)        {            throw new NotImplementedException();        }        private string getResponseData(HttpWebResponse response)        {            string data = "";            if (response != null)            {                Stream s = response.GetResponseStream();                StreamReader sRead = new StreamReader(s,Encoding.GetEncoding("UTF-8"));                data = sRead.ReadToEnd();                sRead.Close();                response.Close();            }            return data;        }    }}
 |