基于Web浏览器的智能卡读写器,cab数字证书安装测试页面

2016-08-09 16:31:22 wenxing

  经常有客户问到,如何通过浏览器去调用IC卡读写器的方法,让B/S系统也可以使用智能卡读写器对智能卡进行充值,扣费等一系列操作。诺塔斯智能科技旗下产品从L1系列到目前的L3系列均支持通过web浏览器调用函数接口从而实现对智能卡读写器的读写操作。基于IE浏览器、360浏览器通过ActiveX控件对读写器的操作,在本地PC上可以通过批处理命令完成,如何在服务器端部署ActiveX控件呢?

 我们将ActiveX控件封装成了cab数字证书,当客户端请求访问读写页面的时候,浏览器会自动提示安装cab数字证书从而注册ActiveX控件。

 演示页面如下:http://www.lotuscard.cc/LotusCardDemo.html 请用IE浏览器或者360浏览器兼容模式打开。

<HTML>
<HEAD><TITLE>LotusCardDemo</TITLE></HEAD>
<BODY>
<OBJECT ID=LotusCardDriver Visible=false WIDTH=0 HEIGHT=0
 CLASSID="CLSID:BD1874A5-3810-4639-8B70-3DDD607BAADB"
 CODEBASE="./LotusCardActive.cab#version=1,0,0,3">
 </OBJECT>

<script language=javascript>

function OnTest()
{
    var nHandle = 0; //设备句柄
    var bResult = 0;
    var strTextInfo = "";
    nHandle    =    LotusCardDriver.OpenDevice("",0,0,0);
    if(nHandle <=0 ) 
    {
        alert("打开设备失败!");
        return;
    }
    LotusCardDriver.Beep(nHandle,10);
  bResult = LotusCardDriver.SetCardType(nHandle, 'A');
  if(bResult!=1)
  {
      alert("设置卡类型失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;
  }            
    bResult = LotusCardDriver.GetCardNo(nHandle,38);
  if(bResult!=1)
  {
      alert("寻卡失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;
  }    
  alert("卡号:"+LotusCardDriver.CardNo);
  LotusCardDriver.CardPassWord="FFFFFFFFFFFF";

  bResult=LotusCardDriver.LoadKey(nHandle, 96, 0);    
  if(bResult!=1)
  {
      alert("装载密码失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;       
  }
  
  bResult=LotusCardDriver.Authentication(nHandle, 96, 0);
  if(bResult!=1)
  {
      alert("密码认证失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;      
  }  
  
  bResult=LotusCardDriver.LoadKey(nHandle, 97, 0);    
  if(bResult!=1)
  {
      alert("装载密码失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;       
  }
  
  bResult=LotusCardDriver.Authentication(nHandle, 97, 0);
  if(bResult!=1)
  {
      alert("密码认证失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;      
  } 
    
  bResult = LotusCardDriver.Read(nHandle, 2);
  if(bResult!=1)
  {
      alert("读2块失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;      
  }
  alert("2块:"+LotusCardDriver.ReadWriteBuffer);
  LotusCardDriver.ReadWriteBuffer="0123456789abcdef0123456789abcdef";
  bResult = LotusCardDriver.Write(nHandle, 2);
  if(bResult!=1)
  {
      alert("写2块失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;      
  }  
  alert("写2块OK");

  bResult = LotusCardDriver.ChangePassword(nHandle, 0, "FFFFFFFFFFFFF","FFFFFFFFFFFFF"); 
  if(bResult!=1)
  {
      alert("扇区0密码修改失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;      
  } 
  alert("扇区0密码修改成功!");
  LotusCardDriver.CardPassWord="FFFFFFFFFFFF";

  bResult=LotusCardDriver.LoadKey(nHandle, 96, 1);    
  if(bResult!=1)
  {
      alert("扇区1装载密码失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;       
  }
  
  bResult=LotusCardDriver.Authentication(nHandle, 96, 1);
  if(bResult!=1)
  {
      alert("扇区1密码认证失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;      
  }
  bResult = LotusCardDriver.WriteText(nHandle, 1, "春眠不觉晓处处蚊子咬夜来风雨声疙瘩知多少");
  if(bResult!=1)
  {
      alert("扇区1写文本失败!");
      LotusCardDriver.CloseDevice(nHandle);
      return;      
  }  
  strTextInfo = LotusCardDriver.ReadText(nHandle, 1);
  alert("扇区1文本:"+strTextInfo);
 
    LotusCardDriver.CloseDevice(nHandle);
}

</script>

<!-- Insert HTML here -->
<INPUT id=test type=button value="读卡器测试" onclick=OnTest()></BODY>
</BODY>
</HTML>