已成功将江苏医保社保卡读取功能集成到ThCardReader项目中,基于HeaSecReadInfo.dll作为主DLL,严格按照江苏医保规范v0.9.9.15实现。
ThCardReader/JiangSuSocialCardBusiness.cs
ThCardReader/JiangSuController.cs
ThCardReader/EntryController.cs
jiangsu
类型调用^
分隔格式ThCardReader/ThCardReader.csproj
严格按照江苏医保规范实现的5个核心函数:
// 1.14.1 初始化
[DllImport("HeaSecReadInfo.dll", EntryPoint = "Init")]
private extern static Int32 Init(string pInitInfo, StringBuilder pErrMsg);
// 1.14.2 读社保卡基本信息
[DllImport("HeaSecReadInfo.dll", EntryPoint = "ReadCardBas")]
private extern static Int32 ReadCardBas(StringBuilder pCardInfo, StringBuilder pBusiCardInfo);
// 1.14.3 检验PIN码
[DllImport("HeaSecReadInfo.dll", EntryPoint = "VerifyPIN")]
private extern static Int32 VerifyPIN(StringBuilder pOutBuff);
// 1.14.4 修改PIN码
[DllImport("HeaSecReadInfo.dll", EntryPoint = "ChangePIN")]
private extern static Int32 ChangePIN(StringBuilder pOutBuff);
// 1.14.8 四合一介质获得个人信息
[DllImport("HeaSecReadInfo.dll", EntryPoint = "GetPersonInfo")]
private extern static Int32 GetPersonInfo(string pInData, StringBuilder pOutData);
严格按照江苏医保规范v0.9.9.15的13个必需参数(全部大写):
{
"IP": "192.168.100.100",
"PORT": 8080,
"TIMEOUT": 120,
"LOG_PATH": "C:\\log\\",
"EC_URL": "https://fuwu-test.nhsa.gov.cn/localcfc/api/hsecfc/localQrCodeQuery",
"CARD_PASSTYPE": "1",
"API_NAME": "api-powersi-test-pri",
"API_VERSION": "1.0.0",
"ACCESS_KEY": "043a6d5927174ab5a7681b193b9fe0e3",
"SECRETKEY": "ZugfjXENyvGIQYdB+hFB+s9JL0A=",
"ORG_ID": "",
"EXT": "",
"AREA_CODE": "320100"
}
参数说明:
与现有系统保持一致的调用方式:
基础URL: http://localhost:8321/readcard/entry/{type}_{action}
支持的调用:
jiangsu_init
- 初始化系统jiangsu_readcard
- 读取社保卡jiangsu_readcard_pin
- 读卡并验证PINjiangsu_verifypin
- 验证PIN码jiangsu_changepin
- 修改PIN码jiangsu_status
- 获取设备状态jiangsu_reset
- 重置系统状态jiangsu_getpersoninfo
- 四合一介质获取个人信息基础URL: http://localhost:8321/readcard/jiangsu/{action}
GET方式示例:
// 初始化
fetch('http://localhost:8321/readcard/jiangsu/init')
// 读取社保卡
fetch('http://localhost:8321/readcard/jiangsu/readcard')
// 获取状态
fetch('http://localhost:8321/readcard/jiangsu/status')
POST方式示例:
// 带配置的初始化(严格按照规范使用大写参数名)
fetch('http://localhost:8321/readcard/jiangsu', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
action: 'init',
config: {
"IP": "192.168.100.100",
"PORT": 8080,
"TIMEOUT": 120,
"LOG_PATH": "C:\\log\\",
"EC_URL": "https://fuwu-test.nhsa.gov.cn/localcfc/api/hsecfc/localQrCodeQuery",
"CARD_PASSTYPE": "1",
"API_NAME": "api-powersi-test-pri",
"API_VERSION": "1.0.0",
"ACCESS_KEY": "043a6d5927174ab5a7681b193b9fe0e3",
"SECRETKEY": "ZugfjXENyvGIQYdB+hFB+s9JL0A=",
"ORG_ID": "",
"EXT": "",
"AREA_CODE": "320100"
}
})
})
// 带PIN验证的读卡
fetch('http://localhost:8321/readcard/jiangsu', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
action: 'readcard',
autoVerifyPIN: true
})
})
所有接口返回统一的JSON格式:
{
"success": true,
"code": 200,
"message": "操作成功",
"device": "江苏医保社保卡读卡器",
"data": { ... },
"timestamp": "2024-01-01 12:00:00"
}
通过ConvertJiangSuDataToStandardFormat
方法,自动转换为前端期望的^
分隔格式:
社保卡号^姓名^身份证号^性别^民族^生日^地址^发卡日期^有效期^发卡机构^照片Base64^^
严格按照38号文标准解析社保卡数据,使用管道符|
分隔:
卡号|姓名|身份证号|性别|民族|出生日期|地址|发卡日期|有效期|发卡机构|照片
集成了智能重置策略,支持:
// 智能读卡示例(在前端实现)
let consecutiveFailures = 0;
const MAX_FAILURES = 3;
async function smartReadCard() {
try {
const response = await fetch('/readcard/entry/jiangsu_readcard');
const result = await response.json();
if (result.code === 200) {
consecutiveFailures = 0; // 成功后重置
return result;
} else {
consecutiveFailures++;
if (consecutiveFailures >= MAX_FAILURES) {
// 自动重置并重新初始化
await fetch('/readcard/entry/jiangsu_reset');
await fetch('/readcard/entry/jiangsu_init');
consecutiveFailures = 0;
}
throw new Error(result.message);
}
} catch (error) {
// 错误处理
throw error;
}
}
提供了完整的测试页面:jiangsu_test.html
包含功能:
jiangsu_test.html
确保以下DLL文件位于应用程序目录或系统PATH中:
HeaSecReadInfo.dll
(主DLL)可选的配置文件(JSON格式):
{
"jiangsu": {
"defaultConfig": {
"ip": "192.168.1.100",
"port": "8080",
"timeout": "30000",
"logPath": "C:\\logs\\jiangsu_medical.log",
"ecUrl": "https://fuwu.nhsa.gov.cn",
"orgCode": "H32010000001"
}
}
}
这样的集成既保持了与现有系统的兼容性,又提供了江苏医保的完整功能支持,严格遵循官方规范要求。