# CloudApiServer **Repository Path**: Heylihao/cloud-api-server ## Basic Information - **Project Name**: CloudApiServer - **Description**: 一个用来模拟医保接口的项目,可用来简单的模拟医疗保障信息平台定点医药机构接口与部分地市三方接口(暂时只有药店结算做的比较完全,门诊部分持续开发中)项目可进行有关医保对接的业务系统开发、业务系统医保交易流程演示 ,解决医保官方测试环境不稳定且处于内网,开发、客服演示医保功能困难,自建医保模拟服务。基于.net4.8、winfrom开发,本地只需要一个mysql服务,一键启动,可视化参数控制。 - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: https://api.heylihao.cloud - **GVP Project**: No ## Statistics - **Stars**: 33 - **Forks**: 18 - **Created**: 2024-02-07 - **Last Updated**: 2026-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: 医保, medicare, 挡板, 模拟环境, Mock ## README # CloudApiServer 本项目是一个用来模拟国家医保服务的程序,可用来模拟简单医保中心逻辑,配合本项目进行有关医保对接的业务系统开发,医保相关功能系统演示,可先进行模拟环境开发,不需要链接医保提供的测试环境开发。基于\.net4\.8、winfrom开发,本地只需要一个mysql服务,一键启动,可视化参数控制。 # 本地部署方式 1. 本地安装一个mysql5\.7以上的mysql,将 Database中的表结构sql执行一下,创建最基本的配置表。如需测试目录查询数据,可导入基础数据表(四张表各抽取1000数据供使用) 2. 配置config\.ini中的数据库连接信息,如有redis,可配置redis缓存服务,目前已支持签到签退与人员信息缓存,减少数据库压力,如不配置也可以使用。 3. 本地启用项目,如果提示缺失环境则安装\.net4\.8 4. 启动后保存以下数据库链接地址参数,点击启动api,如未报错,可在浏览器访问 `http://localhost:9090` \(修改过端口就调整端口\),页面输出【当前请求的地址为接口服务地址,请通过客户端或web应用请求\!】即代表项目启动成功,可通过浏览器访问 `http://localhost:9090/web/index.html` 页面,查看数据管理页面是否能正常加载。 5. 可以将你的项目请求医保地址url配置本项目的端口地址,就可以尝试请求签到签退,能正常返回参数即代表成功,就可以愉快的先开发啦 6. 初次使用,需要添加1101人员信息,可直接写入fsi\_psninfo数据表,也可以访问 `http://localhost:9090/web/index.html` 页面,使用页面功能添加人员信息;此页面可管理人员、电子处方、事前事中商品的基础库新增删除功能。 7. 如您想先体验一下,本人部署了一套自用的,接口服务地址 [https://api\.heylihao\.cloud](https://api.heylihao.cloud) 这套服务同步此分支代码 # 其他说明 1. 目前项目并未按照医保要求对服务添加鉴权(如请求签名、密钥等),故若您的项目是从头开发的,本项目可能做不到完整的模拟,建议先使用医保提供的预发环境先开发完成 一个接口且保证能通后,在使用此项目进行后续开发 2. 目前项目所有的医保接口入参(即作为应用方调用中心服务的入参)均未严格按照《医疗保障信息平台定点基线版医药机构接口规范》文档要求做必传参数校验,仅针对返回参数所要求的必要参数进行校验,故使用此项目进行医保开发时请严格按照所属省份的医保接口文档做好最基础的必填项校验 3. 各地区医保配置接口中关于请求地址说明中替换 `http://localhost:9090` 为您部署本项目启动时控制台配置的端口,使用时请将您开发的应用程序调用医保地址按照下面的说明配置成本项目的地址或本人自用部署的地址 4. 国家标准接口地区除开浙江省外的 其他地区暂只开发了药店相关接口,浙江省开发了部分门诊相关的接口,门诊、住院接口本人暂无可实际测试的应用,欢迎有做医院程序的老师补充 5. 本人并非专业开发,\.net开发没有经过系统性学习,都是边写边学的,代码水平比较烂,好在比较直观能看得懂。 # 应用侧开发配置说明 ## 处方中心(国家标准接口) 1. 调用国标的处方中心时,请完整配置处方中心四个密钥,可在控制台拓展参数配置。 2. 因国标签名算法采取的是非对称sm2的签名,机构拿到的是应用私钥和处方中心公钥,服务端对应的应该是应用公钥处方中心私钥,所以如果按照机构下发参数配置则必定签名验证失败,实际开发中可以过滤掉本地对服务端的签名验证。 3. 调用时请将地址配置成 `http://localhost:9090/epc/api` 加上各个接口请求地址。 4. 处方中心暂只支持药店端相关的接口,医院端本人暂无可实际测试的应用,欢迎有做医院程序的老师补充。 5. 关于签名算法的问题遗留有bug,java端对c\#端签名进行验证时,可能会有签名验证失败的情况,建议在控制台关闭签名验证。 > 注:处方中心密钥可以统一配置以下密钥(医保提供的demo示例密钥),这里的私钥和公钥是配对的,应用端和服务端共用一套公钥私钥,可完成签名验证,相当于从非对称改为了对称,或者可以用 [https://lzltool\.cn/SM2](https://lzltool.cn/SM2) 在线生成工具生成一组base64的密钥也可以用。 > > ```c# //应用ID String appId = "57E2D561E97141A3871DEFB410ADD920"; //应用秘钥 String appSecret = "F30D0D261BA04063A0BCAEF19F8ADBCC"; //应用私钥 String privateKey = "AKyhfvPbT+tIJHJkZSDILrw7t+FOG1U58UcupYYTzCOj"; //应用公钥 //(注意:此处应用公钥与平台公钥是不同的,请勿混淆,平台公钥用于对接收平台返回的数据进行验签;应用公钥与应用私钥成对,应用公钥只用于本地的自签名后的验签调用示例; // 平台公钥与平台私钥成对,实际与平台进行接口交互时,是使用平台公钥对平台私钥签名后的远端返回数据进行验签) String publicKey = "BIFd2+2CgjuPAj5FMj5L/L3azTWu86suPtlIJkCo8zjQ44R7SQUUkTgZGdVelRQCM5pW+x9tZGzDPaUNbfD499w="; ``` ## 一码付 1. 调用一码付接口,请配置32位长度的密钥,可在控制台拓展参数配置。一码付相关逻辑未作实际验证是否与医保中心一致,请谨慎使用。 2. 调用时请将地址配置成 `http://localhost:9090/cfc/api` 加上各个接口请求地址。 3. 一码付暂只支持 查询用户一码付状态 signedQuery 获取一码付付款凭据 genPayCert 两个接口且未作入参解析 返回参数固定。 ## 电子凭证 1. 电子凭证中台调用目前仅支持1\.1\.8\.0版本电子凭证动态库调用,高于此版本的动态库会在请求前调用获取加密密钥接口提示工作密钥不正确或加密失败,这部分因缺少实际返回给电子破绽动态库的参数无法解决。 2. 电子凭证中台暂只支持电子凭证验证接口`http://localhost:9090/localcfc/api/hsecfc/localQrCodeQuery` ,其他接口因电子凭证动态库的日志是全加密的,无法知道实际电子凭证中台其他接口返回的参数,解码接口已支持二维码解码、终端解码、密码核验、刷脸授权获取医保身份、刷脸获取医保用户身份授权接口。 3. 电子凭证调用动态库方法时将此地址带入即可调用本服务接口,此接口电子凭证动态库发起的,若使用了1.1.8.0版本接口依然返回获取工作密钥失败,就检查调用地址\(请求了错误地址返回了错误的报文格式导致的\)。 4. 电子凭证相关功能已支持医保动态库的自有实现请求,项目详见:[medicaredll](https://gitee.com/Heylihao/medicare-dll),可替换掉国家医保提供的电子凭证动态库NationECCode\.dll进行测试。 ## 关于对账不平与冲正接口的测试 1. 目前已支持配置结算接口延迟响应,可支持结算接口延迟返回,模拟超时流程 2. 直接调用冲正接口,作废掉订单后再对总账就不平了,或者本地订单删除 3. 根据第一点的说明也能造出来总帐不平 ## 浙江省 1. 浙江省请严格按照《浙江省医疗保障信息平台定点医药机构接口指引》定义好每个接口请求的路由 2. 浙江省接口调用时请配置地址`http://localhost:9090/fsi/api` 加上指引定义的各个接口调用地址(或者看Controller代码中路由配置) 3. 浙江省接口暂未针对请求报文头中的动态库签名做验证,实际应用开发时请注意加上这个,不清楚可研究相关接口文档。 4. 浙江省异地接口请配置地址为 `http://localhost:9090/srs/cts-int/api/transBegin/medicine` 支持1812 1505 两个异地对账接口 5. 浙江省省级自己支持的功能 请配置地址为 `http://localhost:9090/hsa-ims-svc/api` 加上接口对应的路由地址 目前仅支持ZJ3100 近90日购药明细查询接口 ## 陕西省 1. 陕西省调用方式与浙江省一致,路由也一致,参照浙江省说明1、2、3即可 2. 陕西事前事中服务接口需要单独配置地址为 `http://localhost:9090/ims/svc/api/XXXX`\(xxxx为各个接口的实际路径 具体可参照控制器代码定义\) ## 安徽省 1. 安徽省采取阿里云CSB总线服务,故拆分了三个部分。 2. 通用接口(不含3101 3102 3103 9101 9102)请将地址配置成 `http://localhost:9090/1.0.0` ,全部接口都调用此接口,请在请求头中传入 `_apiname=hsa-fsi-XXXX`\(xxxx为各个接口的接口号\) 用来区分。 3. 通用接口请求入参中请在最外层增加 arg0,或者参照 安徽医保开发指引传参,接口返回参数中最外层会包含csb服务相关的参数状态。 4. 3101 3102 3103这三个个接口 请将地址配置成 `http://localhost:9090/1.0.0/hsa-fsi-3101 http://localhost:9090/1.0.0/hsa-fsi-3102 http://localhost:9090/1.0.0/hsa-fsi-3103` 。 5. 9101 9102 请求时请去除最外层的arg0 按照国家接口入参,这两个服务按照安徽官方的说法没有加入csb总线服务,故出入参与国标接口一致。 ## 湖南省 1. 湖南省全部接口请求调用同一个接口,请将地址配置成 `http://localhsot:9090/isp-api/powercsb` 2. 湖南省实际生产中需要使用ak sk对每次请求进行签名并加入请求头中 ,本项目暂无此限制,请开发应用时根据湖南医保文档要求进行操作。 ## 江苏省 1. 江苏省调用地址为 `http://localhost:9090/csb/xxxx` \(xxxx为各个接口的接口号\) 2. 江苏省开发时请严格按照江苏省提供的接口文档进行开发 3. 江苏省医保动态库DLL初始化 动态库会请求 csb/Dinit 走8086端口,服务端部署时需要针对此端口进行处理 ## 江西省 1. 调用接口整体与江苏省一致,但江西省并非直接发起http请求调用,而是调用 医保中心提供的动态库,由动态库发起http请求并将返回报文通过动态库返回给调用方。 2. 请将动态库调用医保接口调整为`http://localhost:9090/csb/hsa-fsi-xxxx` \(xxxx为各个接口的接口号\) ## 甘肃省 1. 甘肃省调用地址为 `http://localhost:9090/prd/hsa/hgs/xxxx` \(xxxx为各个接口的接口号\) 2. 甘肃省实际生产中需要使用ak sk对每次请求进行签名并加入请求头中 ,本项目暂无此限制,请开发应用时根据甘肃省医保文档要求进行操作。 ## 重庆市 1. 重庆市并非直接发起http请求调用,而是调用 医保中心提供的动态库,由动态库发起http请求并将返回报文通过动态库返回给调用方。 2. 重庆市需要在报文根节点增加开发商编码 和开发商密钥,本服务未作限制,请按照重庆市要求做好开发商备案后方可上线 3. 重庆市因动态库配置请求url是加密的,动态库 请求地址为域名\+端口,故需要本地自行修改hosts文件,将以下域名(忘记那个是调用医保服务的地址了)请求的地址改为本项目部署的地址,并将此接口地址端口调整为48000 `127.0.0.1 mas.cq.hsip.gov.cn 127.0.0.1 hss.cq.hsip.gov.cn 127.0.0.1 masyl.cq.hsip.gov.cn 127.0.0.1 hssyl.cq.hsip.gov.cn 127.0.0.1 hsswg.cq.hsip.gov.cn 127.0.0.1 hssyl.cq.hsip.gov.cn` ## 吉林省 1. 吉林省调用地址 常规交易:`http://localhost:9090/mbs/fmi/fsi/api/callFsiService/callService` token: `http://localhost:9090/auth/oauth/token` 文件上下传: `http://localhost:9090/mbs/fsi/api/fileupload`。 2. 吉林省接口调用时需要先获取token进行鉴权,故请先调用token接口获取token后再调用常规交易接口,并将token加入请求头中`Authorization: Bearer token值` 进行鉴权调用(实际服务端对这块没有做校验,只是参照医保接口返回了一个jwt token 后续接口未对jwttoken进行鉴权判断)。 3. 吉林省常规交易接口调用采用了sm4加密与sm2签名算法,请根据机构下发密钥进行配置,sm4加解密可在拓展配置内配置客户端id和客户端Secret,实际使用中只用到了客户端id,保证服务端和客户端都采用同一id即可。 4. sm2签名算法与处方中心类似,存在签名算法采取的是非对称sm2的签名,机构拿到的是客户端私钥和服务端公钥,服务端对应的应该是客户端公钥服务端私钥,所以如果按照机构下发参数配置则必定签名验证失败,实际开发中可以过滤掉本地对服务端的签名验证,或者用在线网站生成两组组sm2的签名密钥分别作为服务端公钥私钥和客户端公钥私钥。 ## 山东进销存接口 1. 山东进销存相关的接口 请将地址配置成 `http://localhost:9090/hsu/mihs/MihsServlet` 只支持签到签退和商品进销存35XX开头的接口,请按照山东进销存接口文档开发 2. 此接口不支持对接了东信和平的地区城市\(如滨州市\),对接东信和平接口的地区按照东信和平的对接文档进行开发 ## 山东滨州接口(东信和平通用) 1. 对接山东滨州东信和平接口,请将地址配置成 `http://localhost:9090/socialopen-sdbz/api/stock` 2. 请按照东信和平接口文档要求入参,进销存部分系统将内部调用山东进销存接口 3. 此接口并非国家医保标准接口 ## 山东日照接口(山大地纬通用) 1. 对接山东日照地纬接口,请将地址配置成 `http://localhost:9090/mhs5/siSettleService` 2. 此接口入参、出参均为xml格式,返回业务数据为json格式,请按照实际文档进行开发,进销存部分按照山东进销存接口入参 3. 此接口并非国家医保标准接口 ## 东软三方对接(全国通用) 1. 对接东软三方接口,请将地址配置成 `http://localhost:9090/public/` 加上业务接口地址 2. 此接口并非标准医保接口,部分地区限制了只能和东软对接,故增加了东软三方的相关服务