using Newtonsoft.Json.Linq; using System; using System.Web.Http; namespace ThCardReader { /// /// 江苏医保控制器 - 集成到现有项目架构 /// public class JiangSuController : ApiController { /// /// 江苏医保操作入口 /// GET方式:/readcard/jiangsu/{id} /// /// 操作类型 /// 操作结果 public JObject Get(string id) { JObject result = new JObject(); if (string.IsNullOrEmpty(id)) { result.Add("success", false); result.Add("code", 1001); result.Add("message", "江苏医保操作参数为空!"); result.Add("device", "江苏医保社保卡读卡器"); return result; } try { switch (id.ToLower()) { case "init": result = JiangSuSocialCardBusiness.Initialize(); break; case "readcard": result = JiangSuSocialCardBusiness.ReadSocialCard(false); break; case "readcard_pin": result = JiangSuSocialCardBusiness.ReadSocialCard(true); break; case "readcard_auto": result = JiangSuSocialCardBusiness.ReadSocialCard(false, true); break; case "readcard_auto_pin": result = JiangSuSocialCardBusiness.ReadSocialCard(true, true); break; case "verifypin": result = JiangSuSocialCardBusiness.VerifyCardPIN(); break; case "changepin": result = JiangSuSocialCardBusiness.ChangeCardPIN(); break; case "status": result = JiangSuSocialCardBusiness.GetDeviceStatus(); break; case "reset": result = JiangSuSocialCardBusiness.ResetSystemState(); break; case "getpersoninfo": result = JiangSuSocialCardBusiness.GetPersonInfo("socialcard", ""); break; case "checkdll": result = JiangSuSocialCardBusiness.CheckDllExists(); break; case "offline": result = JiangSuSocialCardBusiness.ReadSocialCardOffline(); break; case "diagnose": result = JiangSuSocialCardBusiness.DiagnoseCardReader(); break; case "testconfig": result = JiangSuSocialCardBusiness.TestNetworkConfigurations(); break; case "standard": result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(3); // 默认自动寻卡接触式优先 break; case "standard1": result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(1); // 接触式 break; case "standard2": result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(2); // 非接触式 break; case "standard3": result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(3); // 自动寻卡接触式优先 break; case "standard4": result = JiangSuSocialCardBusiness.ReadSocialCardByStandard(4); // 自动寻卡非接触式优先 break; default: result.Add("success", false); result.Add("code", 1001); result.Add("message", "江苏医保操作【" + id + "】错误!允许的操作为【init、readcard、readcard_pin、readcard_auto、readcard_auto_pin、verifypin、changepin、status、reset、getpersoninfo、checkdll、offline、diagnose、testconfig、standard、standard1、standard2、standard3、standard4】"); result.Add("device", "江苏医保社保卡读卡器"); break; } } catch (Exception ex) { result.Add("success", false); result.Add("code", 9001); result.Add("message", $"江苏医保操作异常: {ex.Message}"); result.Add("device", "江苏医保社保卡读卡器"); result.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } return result; } /// /// POST方式调用江苏医保接口 /// /// 请求参数 /// 操作结果 [HttpPost] public JObject Post([FromBody] dynamic request) { JObject result = new JObject(); try { if (request == null || request.action == null) { result.Add("success", false); result.Add("code", 1001); result.Add("message", "江苏医保请求参数错误"); return result; } string action = (string)request.action; switch (action.ToLower()) { case "init": // 解析初始化配置 JiangSuSocialCardBusiness.JiangSuConfig config = null; if (request.config != null) { config = new JiangSuSocialCardBusiness.JiangSuConfig(); // 支持大写参数名(规范要求) if (request.config.IP != null) config.IP = (string)request.config.IP; if (request.config.PORT != null) config.PORT = (int)request.config.PORT; if (request.config.TIMEOUT != null) config.TIMEOUT = (int)request.config.TIMEOUT; if (request.config.LOG_PATH != null) config.LOG_PATH = (string)request.config.LOG_PATH; if (request.config.EC_URL != null) config.EC_URL = (string)request.config.EC_URL; if (request.config.CARD_PASSTYPE != null) config.CARD_PASSTYPE = (string)request.config.CARD_PASSTYPE; if (request.config.API_NAME != null) config.API_NAME = (string)request.config.API_NAME; if (request.config.API_VERSION != null) config.API_VERSION = (string)request.config.API_VERSION; if (request.config.ACCESS_KEY != null) config.ACCESS_KEY = (string)request.config.ACCESS_KEY; if (request.config.SECRETKEY != null) config.SECRETKEY = (string)request.config.SECRETKEY; if (request.config.ORG_ID != null) config.ORG_ID = (string)request.config.ORG_ID; if (request.config.EXT != null) config.EXT = (string)request.config.EXT; if (request.config.AREA_CODE != null) config.AREA_CODE = (string)request.config.AREA_CODE; // 兼容小写参数名(向后兼容) if (request.config.ip != null) config.IP = (string)request.config.ip; if (request.config.port != null) config.PORT = (int)request.config.port; if (request.config.timeout != null) config.TIMEOUT = (int)request.config.timeout; if (request.config.logPath != null) config.LOG_PATH = (string)request.config.logPath; if (request.config.ecUrl != null) config.EC_URL = (string)request.config.ecUrl; } result = JiangSuSocialCardBusiness.Initialize(config); break; case "readcard": bool autoVerifyPIN = false; bool autoInit = false; if (request.autoVerifyPIN != null) autoVerifyPIN = (bool)request.autoVerifyPIN; if (request.autoInit != null) autoInit = (bool)request.autoInit; result = JiangSuSocialCardBusiness.ReadSocialCard(autoVerifyPIN, autoInit); break; case "getpersoninfo": string mediaType = "socialcard"; string inputData = ""; if (request.mediaType != null) mediaType = (string)request.mediaType; if (request.inputData != null) inputData = (string)request.inputData; result = JiangSuSocialCardBusiness.GetPersonInfo(mediaType, inputData); break; default: // 其他操作直接调用GET方法 result = Get(action); break; } } catch (Exception ex) { result.Add("success", false); result.Add("code", 9002); result.Add("message", $"江苏医保POST操作异常: {ex.Message}"); result.Add("device", "江苏医保社保卡读卡器"); result.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } return result; } } }