123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- using Newtonsoft.Json.Linq;
- using System;
- using System.Web.Http;
- namespace ThCardReader
- {
- /// <summary>
- /// 江苏医保控制器 - 集成到现有项目架构
- /// </summary>
- public class JiangSuController : ApiController
- {
- /// <summary>
- /// 江苏医保操作入口
- /// GET方式:/readcard/jiangsu/{id}
- /// </summary>
- /// <param name="id">操作类型</param>
- /// <returns>操作结果</returns>
- 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;
- }
- /// <summary>
- /// POST方式调用江苏医保接口
- /// </summary>
- /// <param name="request">请求参数</param>
- /// <returns>操作结果</returns>
- [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;
- }
- }
- }
|