自助机做医保统筹、个账支付、银联支付

🛖 概述

医院部署自助机

病人在自助机上做相关的查询、缴费业务。

需要解决:

  1. HIS接口对接,如果HIS没有接口,那么需要对接医保数据接口(对于大医院是不存在的)。
  2. 医保结算包括统筹的对接
  3. 统筹以外自费金额的结算对接,自费有包括个账和现金(现金、刷卡、微信支付宝)。

🚲 分析

关于医保统筹,见

的读卡接口及医保相关结算文档。

自费方面,现金就不用考虑了,微信支付宝也有相关通道,照着走即可;这里主要说个账。

个账是用户医保卡中个人账户的钱(用户可以在药店、医院中使用的钱)。

以广东为例,实帐,走银联结算。

关键点是:

  • 读取卡片基本信息
  • 读取卡片个账账号
  • 执行社保卡(医保卡)消费
  • 银联业务流程

🚙 处理

只讲读卡器相关部分,读卡及消费,只需要SSCardDriver.dll。

  1. 读取卡片基本信息

    调用 iReadCardBas,要求有PSAM卡,如果没有PSAM卡需要有加密机。

    使用加密机就需要调 iReadCardBas_HSM_Step1 + iReadCardBas_HSM_Step2 。

    读出数据模板如下

    上面通过发卡地区行政区划代码 110000 跟PSAM卡号前6位(终端机编号442000) 对比,判断是本地还是异地。(默认是装本地的PSAM卡),上例中本地终端机编号是442000,用户社保卡是110000,所以是异地卡。 每个卡的卡识别码、卡号都是唯一的,在用iReadCard时(后面会用到),这个信息是后面其它读卡操作的入参之一,格式如下。110000D15600000500069C68DC97D090| A04738174|,这个在读帐号上会用得到。

  2. 读取卡片个账账号

    个账账号是写在社保卡里面的,调用SscardDriver.dll中的通用读卡来读取,如下图

    三代卡读取地址为:DF04EF05|8B|$

    可以读到,读卡里要验证pin,即需要通过键盘输入密码,请确认键盘是否连接,或正常使用第三方键盘库。

    注意:

    • 广州的一代卡,读取地址是:DF04EF0D|F1|$
    • 珠海部分旧的社保卡,读取地址是:DF04EF05|8B|8A|$

  3. 执行社保卡(医保卡)消费
    • 首先是做医保结算,计算过出统筹金额、自费金额。
    • 通过SSCardDriver.dll的接口 iDoDebit 进行消费操作。

      交易获得:算法标识、密钥地址、交易金额、交易类型、终端机编号、终端交易序号、交易时间、交易验证码(TAC)。

    • 传到银联后台或医保后台。走相关扣款流程。

🚚 使用第三方金融标准的键盘对接方法

设计银联交易,需要有标准的安全键盘,使用第三方厂家的键盘,需要做对键盘驱动库(SSKeyBDriver.dll),并修改配置文件(egapp.ini),让SScardDriver.dll在需要驱动键盘时,自动通过键盘驱动库去驱动键盘。

  1. 编写键盘驱动库(SSKeyBDriver.dll)
    long iReaderGetPass(unsigned char ctimeout,char *cdsp,unsigned char audiocmd,unsigned char *cpasslen,char *cpass)
    
    /*
    参数说明 
    ctimeout:	等待键盘输入的超时时间,单位为秒; 
    cdsp:		密码键盘液晶显示汉字字符串(预留参数,暂不启用); 
    audiocmd:	密码键盘语音提示代码: 
    1:语音提示“请输入密码” 
    2:语音提示“请再输入一次” 
    3:语音提示“请输入原密码” 
    4:语音提示“请输入新密码”
    cpasslen:	输入密码的长度; 
    cpass:		输入的密码值,字符串格式; 
    
    函数返回: 	
    0		成功取得密码,cpasslen=密码位数,cpass=密码; 
    -31		用户取消密码输入,cpasslen=0,cpass 为空; 
    -32		输入操作超时,cpasslen=0,cpass 为空; 
    -39		其它错误,cpasslen=0,cpass 为空; 
    
    举例:如用户输入 123456 这样的 6 位密码。则返参为:密码长度 cpasslen=6;输入的密码值 cpass=“123456”的字符串。
    注:无论读卡器是否带有密码键盘、密码键盘是否与读卡器连接,密码的获取都由上述函数完成。
    */
    
    
  2. 修改SSCardDriver.dll的配置文件(egapp.ini)

    配置文件 egapp.ini和SSCardDriver.dll在一个目录内,修改

    EnableExtKBLib=TRUE
    ; 是否启用外部密码键盘库(SSKeyBDriver.dll)默认FALSE
    ; TRUE表示启用,此时密码键盘输入受外部键盘库SSKeyBDriver.dll控制,EnableUSBKB和EnablePS2KB值无效
    ; FALSE表示不启用