238 lines
9.0 KiB
C#
238 lines
9.0 KiB
C#
|
using HL_FristAidPlatform_Bussiness;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.IO;
|
|||
|
using System.Linq;
|
|||
|
using System.Net;
|
|||
|
using System.Security.Cryptography;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Xml;
|
|||
|
|
|||
|
namespace HL_FristAidPlatform_Service
|
|||
|
{
|
|||
|
public class DirectCaseReporting
|
|||
|
{
|
|||
|
public static byte[] aesKey;
|
|||
|
public static byte[] aesIv;
|
|||
|
/// <summary>
|
|||
|
/// 单位编码,请从授权文档中获取
|
|||
|
/// </summary>
|
|||
|
public static string uuCode = "27144";
|
|||
|
/// <summary>
|
|||
|
/// 授权码,请从授权文档中获取
|
|||
|
/// </summary>
|
|||
|
public static string uuAuth = "wKZIUUPCnxtbmAiRQN8dYGsir0uBBUaLHFeyf3KgRT3K3fjIkMhiIEFqb0adkNAS";
|
|||
|
/// <summary>
|
|||
|
/// 过期时间
|
|||
|
/// </summary>
|
|||
|
public static int timeout = 40000;
|
|||
|
public static Encoding enc = Encoding.UTF8;
|
|||
|
public static DateTime exp = DateTime.Now;
|
|||
|
public static string token;
|
|||
|
|
|||
|
public static T_Service_Apoplexy_UploadInfoBLL bll = new T_Service_Apoplexy_UploadInfoBLL();
|
|||
|
|
|||
|
public static void sendXml(string data, string patientGuid)
|
|||
|
{
|
|||
|
//2018院内筛查上报测试接口;
|
|||
|
string url = "https://api.chinasdc.cn/StrokeInterface/Interface2018BB/AddArchivesCases2018ZB03Test";
|
|||
|
//正式接口
|
|||
|
//tring url = "https://api.chinasdc.cn/StrokeInterface/Interface2018BB/AddArchivesCases2018ZB03";
|
|||
|
|
|||
|
string response = UpData(url, data);
|
|||
|
if (string.IsNullOrEmpty(response))
|
|||
|
{
|
|||
|
//调用接口失败
|
|||
|
HL_FristAidPlatform_Help.Help.WriteErrorLog("卒中病例上传错误信息", response);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
XmlDocument xmlDoc = new XmlDocument();
|
|||
|
xmlDoc.LoadXml(response);
|
|||
|
XmlElement root = xmlDoc.DocumentElement;
|
|||
|
string Err = root.SelectSingleNode("Err").InnerText;
|
|||
|
string Msg = root.SelectSingleNode("Msg").InnerText;
|
|||
|
//日志
|
|||
|
if (Err.Equals("0"))
|
|||
|
{
|
|||
|
//上传成功
|
|||
|
bll.UpdateReportingInfo(patientGuid, 1, response, "0");
|
|||
|
HL_FristAidPlatform_Help.Help.WriteErrorLog("患者上传状态修改方法成功,患者唯一标识:", patientGuid);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
bll.UpdateReportingInfo(patientGuid, 2, response, "0");
|
|||
|
//上传失败,记录错误。
|
|||
|
HL_FristAidPlatform_Help.Help.WriteErrorLog("卒中病例上传错误信息,患者唯一标识" + patientGuid, response);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 调用接口上传数据
|
|||
|
/// </summary>
|
|||
|
/// <param name="url">接口url</param>
|
|||
|
/// <param name="data">数据xml</param>
|
|||
|
/// <returns></returns>
|
|||
|
public static string UpData(string url, string data)
|
|||
|
{
|
|||
|
string token_ = GetToken();
|
|||
|
if (string.IsNullOrEmpty(token_))
|
|||
|
{
|
|||
|
HL_FristAidPlatform_Help.Help.WriteErrorLog("错误信息:调用接口时没有获取到token", "");
|
|||
|
//没有获取到token
|
|||
|
return null;
|
|||
|
}
|
|||
|
Dictionary<String, String> parameters = new Dictionary<String, String>();
|
|||
|
parameters.Add("uuCode", uuCode);
|
|||
|
parameters.Add("Token", token_);
|
|||
|
string data_ = AES(data);
|
|||
|
parameters.Add("Data", data_);
|
|||
|
parameters.Add("uNickName", "hm15892885934");
|
|||
|
return doPost(url, parameters);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取Token
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
private static string GetToken()
|
|||
|
{
|
|||
|
if (string.IsNullOrEmpty(token) || DateTime.Now >= exp)
|
|||
|
{
|
|||
|
//token不存在 或者 过期 重新获取
|
|||
|
Dictionary<String, String> parameters = new Dictionary<String, String>();
|
|||
|
parameters.Add("uuCode", uuCode);
|
|||
|
parameters.Add("uuAuth", uuAuth);
|
|||
|
parameters.Add("type", "ZB");
|
|||
|
string url = "https://api.chinasdc.cn/StrokeInterface/ApiAuth/GetToken";
|
|||
|
string response = doPost(url, parameters);
|
|||
|
if (string.IsNullOrEmpty(response))
|
|||
|
{
|
|||
|
HL_FristAidPlatform_Help.Help.WriteErrorLog("错误信息:调用授权接收出错", response);
|
|||
|
//调用授权接收出错
|
|||
|
return null;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
XmlDocument xmlDoc = new XmlDocument();
|
|||
|
xmlDoc.LoadXml(response);
|
|||
|
XmlElement root = xmlDoc.DocumentElement;
|
|||
|
string Err = root.SelectSingleNode("Err").InnerText;
|
|||
|
string Msg = root.SelectSingleNode("Msg").InnerText;
|
|||
|
if (Err.Equals("0"))
|
|||
|
{
|
|||
|
XmlNode data = root.SelectSingleNode("Data");
|
|||
|
token = data.SelectSingleNode("Token").InnerText;
|
|||
|
aesKey = enc.GetBytes(data.SelectSingleNode("AESKEY").InnerText);
|
|||
|
aesIv = enc.GetBytes(data.SelectSingleNode("AESIV").InnerText);
|
|||
|
//获取到token 返回
|
|||
|
//记录过期时间
|
|||
|
exp = DateTime.Now.AddHours(7.8);
|
|||
|
return token;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
HL_FristAidPlatform_Help.Help.WriteErrorLog("错误信息:调用授权接收出错", response);
|
|||
|
//调用授权接收出错 记录错误
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return token;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 调用http post接口
|
|||
|
/// </summary>
|
|||
|
/// <param name="url">url地址</param>
|
|||
|
/// <param name="parameters">参数</param>
|
|||
|
/// <returns>Response</returns>
|
|||
|
private static string doPost(string url, IDictionary<string, string> parameters)
|
|||
|
{
|
|||
|
|
|||
|
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
|
|||
|
request.Method = "POST";
|
|||
|
request.ContentType = "application/x-www-form-urlencoded";
|
|||
|
request.Timeout = timeout;
|
|||
|
|
|||
|
//如果需要POST数据
|
|||
|
if (!(parameters == null || parameters.Count == 0))
|
|||
|
{
|
|||
|
StringBuilder buffer = new StringBuilder();
|
|||
|
bool bl = true;
|
|||
|
foreach (string key in parameters.Keys)
|
|||
|
{
|
|||
|
if (bl)
|
|||
|
{
|
|||
|
buffer.AppendFormat("{0}={1}", key, parameters[key]);
|
|||
|
bl = false;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
|
|||
|
}
|
|||
|
}
|
|||
|
byte[] data = enc.GetBytes(buffer.ToString());
|
|||
|
using (Stream stream = request.GetRequestStream())
|
|||
|
{
|
|||
|
stream.Write(data, 0, data.Length);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
request.ContentLength = 0;
|
|||
|
}
|
|||
|
HttpWebResponse hwr = request.GetResponse() as HttpWebResponse;
|
|||
|
if (hwr.StatusCode == HttpStatusCode.OK)
|
|||
|
{
|
|||
|
Stream receiveStream = hwr.GetResponseStream();
|
|||
|
StreamReader readStream = new StreamReader(receiveStream, enc);
|
|||
|
string str = readStream.ReadToEnd();
|
|||
|
hwr.Close();
|
|||
|
receiveStream.Close();
|
|||
|
readStream.Close();
|
|||
|
return str;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// AES加密
|
|||
|
/// </summary>
|
|||
|
/// <param name="data">需要加密的内容</param>
|
|||
|
/// <returns>加密后的Base64字符串</returns>
|
|||
|
private static string AES(string data)
|
|||
|
{
|
|||
|
//分组加密算法
|
|||
|
SymmetricAlgorithm des = Rijndael.Create();
|
|||
|
byte[] inputByteArray = enc.GetBytes(data);//得到需要加密的字节数组
|
|||
|
//设置密钥及密钥向量
|
|||
|
des.Key = aesKey;
|
|||
|
des.IV = aesIv;
|
|||
|
byte[] cipherBytes = null;
|
|||
|
using (MemoryStream ms = new MemoryStream())
|
|||
|
{
|
|||
|
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
|
|||
|
{
|
|||
|
cs.Write(inputByteArray, 0, inputByteArray.Length);
|
|||
|
cs.FlushFinalBlock();
|
|||
|
cipherBytes = ms.ToArray();//得到加密后的字节数组
|
|||
|
cs.Close();
|
|||
|
ms.Close();
|
|||
|
}
|
|||
|
}
|
|||
|
return Convert.ToBase64String(cipherBytes);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|