using Newtonsoft.Json.Linq; using System; using System.Web.Http; namespace ThCardReader { /// /// 江苏医保社保卡读取API控制器 /// 参考华视读卡器控制器设计,独立于现有医保业务 /// public class JiangSuSocialCardController : ApiController { /// /// 初始化江苏医保社保卡系统 /// /// 配置参数 /// 初始化结果 [HttpPost] [Route("api/jiangsu/init")] public IHttpActionResult InitJiangSuSystem([FromBody] dynamic request) { try { JiangSuSocialCardBusiness.JiangSuConfig config = null; // 解析配置参数 if (request != null) { config = new JiangSuSocialCardBusiness.JiangSuConfig(); if (request.IP != null) config.IP = (string)request.IP; if (request.PORT != null) config.PORT = (int)request.PORT; if (request.TIMEOUT != null) config.TIMEOUT = (int)request.TIMEOUT; if (request.LOG_PATH != null) config.LOG_PATH = (string)request.LOG_PATH; if (request.CARD_PASSTYPE != null) config.CARD_PASSTYPE = (string)request.CARD_PASSTYPE; if (request.EC_URL != null) config.EC_URL = (string)request.EC_URL; if (request.API_NAME != null) config.API_NAME = (string)request.API_NAME; if (request.API_VERSION != null) config.API_VERSION = (string)request.API_VERSION; if (request.ACCESS_KEY != null) config.ACCESS_KEY = (string)request.ACCESS_KEY; if (request.SECRETKEY != null) config.SECRETKEY = (string)request.SECRETKEY; if (request.ORG_ID != null) config.ORG_ID = (string)request.ORG_ID; if (request.AREA_CODE != null) config.AREA_CODE = (string)request.AREA_CODE; if (request.EXT != null) config.EXT = (string)request.EXT; } var result = JiangSuSocialCardBusiness.Initialize(config); if ((int)result["code"] == 200) { return Ok(result); } else { return BadRequest(result.ToString()); } } catch (Exception ex) { var errorResult = new JObject { ["code"] = 1001, ["message"] = $"江苏医保系统初始化异常: {ex.Message}", ["device"] = "江苏医保社保卡读卡器", ["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; return BadRequest(errorResult.ToString()); } } /// /// 读取社保卡基本信息 /// /// 读卡参数 /// 社保卡信息 [HttpPost] [Route("api/jiangsu/readcard")] public IHttpActionResult ReadSocialCard([FromBody] dynamic request) { try { bool autoVerifyPIN = false; if (request != null && request.autoVerifyPIN != null) { autoVerifyPIN = (bool)request.autoVerifyPIN; } var result = JiangSuSocialCardBusiness.ReadSocialCard(autoVerifyPIN); if ((int)result["code"] == 200) { return Ok(result); } else { return BadRequest(result.ToString()); } } catch (Exception ex) { var errorResult = new JObject { ["code"] = 2001, ["message"] = $"江苏医保读卡异常: {ex.Message}", ["device"] = "江苏医保社保卡读卡器", ["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; return BadRequest(errorResult.ToString()); } } /// /// 验证社保卡PIN码 /// /// 验证结果 [HttpPost] [Route("api/jiangsu/verifypin")] public IHttpActionResult VerifyCardPIN() { try { var result = JiangSuSocialCardBusiness.VerifyCardPIN(); if ((int)result["code"] == 200) { return Ok(result); } else { return BadRequest(result.ToString()); } } catch (Exception ex) { var errorResult = new JObject { ["code"] = 3001, ["message"] = $"江苏医保PIN验证异常: {ex.Message}", ["device"] = "江苏医保社保卡读卡器", ["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; return BadRequest(errorResult.ToString()); } } /// /// 修改社保卡PIN码 /// /// 修改结果 [HttpPost] [Route("api/jiangsu/changepin")] public IHttpActionResult ChangeCardPIN() { try { var result = JiangSuSocialCardBusiness.ChangeCardPIN(); if ((int)result["code"] == 200) { return Ok(result); } else { return BadRequest(result.ToString()); } } catch (Exception ex) { var errorResult = new JObject { ["code"] = 4001, ["message"] = $"江苏医保PIN修改异常: {ex.Message}", ["device"] = "江苏医保社保卡读卡器", ["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; return BadRequest(errorResult.ToString()); } } /// /// 四合一介质支持 - 获取个人信息 /// /// 介质类型和输入数据 /// 个人信息 [HttpPost] [Route("api/jiangsu/getpersoninfo")] public IHttpActionResult GetPersonInfo([FromBody] dynamic request) { try { string mediaType = "socialcard"; string inputData = ""; if (request != null) { if (request.mediaType != null) mediaType = (string)request.mediaType; if (request.inputData != null) inputData = (string)request.inputData; } var result = JiangSuSocialCardBusiness.GetPersonInfo(mediaType, inputData); if ((int)result["code"] == 200) { return Ok(result); } else { return BadRequest(result.ToString()); } } catch (Exception ex) { var errorResult = new JObject { ["code"] = 5001, ["message"] = $"江苏医保个人信息获取异常: {ex.Message}", ["device"] = "江苏医保社保卡读卡器", ["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; return BadRequest(errorResult.ToString()); } } /// /// 获取设备状态 /// /// 设备状态 [HttpGet] [Route("api/jiangsu/status")] public IHttpActionResult GetDeviceStatus() { try { var result = JiangSuSocialCardBusiness.GetDeviceStatus(); return Ok(result); } catch (Exception ex) { var errorResult = new JObject { ["code"] = 7001, ["message"] = $"获取江苏医保设备状态异常: {ex.Message}", ["device"] = "江苏医保社保卡读卡器", ["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; return BadRequest(errorResult.ToString()); } } /// /// 重置系统内部状态 /// /// 重置结果 [HttpPost] [Route("api/jiangsu/reset")] public IHttpActionResult ResetSystemState() { try { var result = JiangSuSocialCardBusiness.ResetSystemState(); return Ok(result); } catch (Exception ex) { var errorResult = new JObject { ["code"] = 6001, ["message"] = $"江苏医保系统状态重置异常: {ex.Message}", ["device"] = "江苏医保社保卡读卡器", ["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; return BadRequest(errorResult.ToString()); } } /// /// 简化调用接口 - 快速读卡 /// /// 操作类型:readcard、verifypin、status、reset /// 是否自动验证PIN /// 操作结果 [HttpGet] [Route("api/jiangsu/simple")] public IHttpActionResult SimpleCall(string action = "readcard", bool autoVerifyPIN = false) { try { switch (action.ToLower()) { case "readcard": var readResult = JiangSuSocialCardBusiness.ReadSocialCard(autoVerifyPIN); return readResult["code"].Value() == 200 ? Ok(readResult) : BadRequest(readResult.ToString()); case "verifypin": var pinResult = JiangSuSocialCardBusiness.VerifyCardPIN(); return pinResult["code"].Value() == 200 ? Ok(pinResult) : BadRequest(pinResult.ToString()); case "status": var statusResult = JiangSuSocialCardBusiness.GetDeviceStatus(); return Ok(statusResult); case "reset": var resetResult = JiangSuSocialCardBusiness.ResetSystemState(); return Ok(resetResult); default: var errorResult = new JObject { ["code"] = 8001, ["message"] = $"不支持的操作类型: {action}", ["device"] = "江苏医保社保卡读卡器", ["supportedActions"] = new JArray { "readcard", "verifypin", "status", "reset" } }; return BadRequest(errorResult.ToString()); } } catch (Exception ex) { var errorResult = new JObject { ["code"] = 8002, ["message"] = $"简化调用异常: {ex.Message}", ["device"] = "江苏医保社保卡读卡器", ["action"] = action }; return BadRequest(errorResult.ToString()); } } /// /// 健康检查接口 /// /// 系统健康状态 [HttpGet] [Route("api/jiangsu/health")] public IHttpActionResult HealthCheck() { try { var result = new JObject { ["code"] = 200, ["message"] = "江苏医保社保卡系统运行正常", ["device"] = "江苏医保社保卡读卡器", ["version"] = "1.0.0", ["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ["status"] = JiangSuSocialCardBusiness.GetDeviceStatus()["status"] }; return Ok(result); } catch (Exception ex) { var errorResult = new JObject { ["code"] = 9001, ["message"] = $"健康检查异常: {ex.Message}", ["device"] = "江苏医保社保卡读卡器" }; return BadRequest(errorResult.ToString()); } } /// /// API帮助文档 /// /// API使用说明 [HttpGet] [Route("api/jiangsu/help")] public IHttpActionResult GetApiHelp() { var helpInfo = new JObject { ["title"] = "江苏医保社保卡读取API接口文档", ["version"] = "1.0.0", ["device"] = "江苏医保社保卡读卡器", ["baseUrl"] = "http://localhost:8321/api/jiangsu", ["endpoints"] = new JObject { ["初始化系统"] = new JObject { ["method"] = "POST", ["url"] = "/init", ["description"] = "初始化江苏医保社保卡系统", ["parameters"] = new JObject { ["IP"] = "医保平台IP地址", ["PORT"] = "医保平台端口", ["TIMEOUT"] = "超时时间(秒)", ["ORG_ID"] = "定点编号", ["ACCESS_KEY"] = "访问密钥", ["SECRETKEY"] = "秘钥" } }, ["读取社保卡"] = new JObject { ["method"] = "POST", ["url"] = "/readcard", ["description"] = "读取社保卡基本信息(38号文格式)", ["parameters"] = new JObject { ["autoVerifyPIN"] = "是否自动验证PIN码" } }, ["验证PIN码"] = new JObject { ["method"] = "POST", ["url"] = "/verifypin", ["description"] = "验证社保卡PIN码" }, ["修改PIN码"] = new JObject { ["method"] = "POST", ["url"] = "/changepin", ["description"] = "修改社保卡PIN码" }, ["四合一读取"] = new JObject { ["method"] = "POST", ["url"] = "/getpersoninfo", ["description"] = "四合一介质个人信息获取", ["parameters"] = new JObject { ["mediaType"] = "介质类型: socialcard/electronicvoucher/electronicsocialcard/idcard", ["inputData"] = "输入数据" } }, ["设备状态"] = new JObject { ["method"] = "GET", ["url"] = "/status", ["description"] = "获取设备状态" }, ["重置状态"] = new JObject { ["method"] = "POST", ["url"] = "/reset", ["description"] = "重置系统内部状态(不调用DLL关闭函数)" }, ["简化调用"] = new JObject { ["method"] = "GET", ["url"] = "/simple?action=readcard&autoVerifyPIN=false", ["description"] = "简化调用接口" }, ["健康检查"] = new JObject { ["method"] = "GET", ["url"] = "/health", ["description"] = "系统健康检查" } } }; return Ok(helpInfo); } } }