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);
}
}
}