123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460 |
- using Newtonsoft.Json.Linq;
- using System;
- using System.Web.Http;
- namespace ThCardReader
- {
- /// <summary>
- /// 江苏医保社保卡读取API控制器
- /// 参考华视读卡器控制器设计,独立于现有医保业务
- /// </summary>
- public class JiangSuSocialCardController : ApiController
- {
- /// <summary>
- /// 初始化江苏医保社保卡系统
- /// </summary>
- /// <param name="request">配置参数</param>
- /// <returns>初始化结果</returns>
- [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());
- }
- }
- /// <summary>
- /// 读取社保卡基本信息
- /// </summary>
- /// <param name="request">读卡参数</param>
- /// <returns>社保卡信息</returns>
- [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());
- }
- }
- /// <summary>
- /// 验证社保卡PIN码
- /// </summary>
- /// <returns>验证结果</returns>
- [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());
- }
- }
- /// <summary>
- /// 修改社保卡PIN码
- /// </summary>
- /// <returns>修改结果</returns>
- [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());
- }
- }
- /// <summary>
- /// 四合一介质支持 - 获取个人信息
- /// </summary>
- /// <param name="request">介质类型和输入数据</param>
- /// <returns>个人信息</returns>
- [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());
- }
- }
- /// <summary>
- /// 获取设备状态
- /// </summary>
- /// <returns>设备状态</returns>
- [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());
- }
- }
- /// <summary>
- /// 重置系统内部状态
- /// </summary>
- /// <returns>重置结果</returns>
- [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());
- }
- }
- /// <summary>
- /// 简化调用接口 - 快速读卡
- /// </summary>
- /// <param name="action">操作类型:readcard、verifypin、status、reset</param>
- /// <param name="autoVerifyPIN">是否自动验证PIN</param>
- /// <returns>操作结果</returns>
- [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<int>() == 200 ? Ok(readResult) : BadRequest(readResult.ToString());
- case "verifypin":
- var pinResult = JiangSuSocialCardBusiness.VerifyCardPIN();
- return pinResult["code"].Value<int>() == 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());
- }
- }
- /// <summary>
- /// 健康检查接口
- /// </summary>
- /// <returns>系统健康状态</returns>
- [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());
- }
- }
- /// <summary>
- /// API帮助文档
- /// </summary>
- /// <returns>API使用说明</returns>
- [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);
- }
- }
- }
|