public string sendApdu(string Apdu) { try{ string firstAction = Apdu; Byte[] sendData = System.Text.Encoding.ASCII.GetBytes(firstAction); int[] exdataLen1 = new int[2]; Byte[] RxData = new Byte[1024]; int ret = CRT603.CRT603Vx_RF_SendApdu(sendData.Length, sendData, exdataLen1, RxData); if (ret == 0) { string strRecv2 = ""; for (int i = 0; i < exdataLen1[0]; i++) { strRecv2 += string.Format("{0:X2}", RxData[i]); } return(strRecv2); } throw new Exception(); } catch (Exception ex) { throw new Exception("系统异常"); } }
/// <summary> /// CRT603读万通卡 /// </summary> /// <returns></returns> public string GetCardNoByBusReader() { try { string port = SysConfigHelper.readerNode("CRT603Port"); //int openRet = CRT603.CRT603Vx_OpenConnection(Int32.Parse(port), 19200); //上电 int iOutAtrLen = 0; byte[] byOutAtrData = new byte[1024]; int chipRet = CRT603.CRT603Vx_RF_chipPower(ref iOutAtrLen, byOutAtrData); string firstAction = "00A40000023F00"; Byte[] sendData = System.Text.Encoding.ASCII.GetBytes(firstAction); int[] exdataLen1 = new int[2]; Byte[] RxData = new Byte[1024]; int ret = CRT603.CRT603Vx_RF_SendApdu(sendData.Length, sendData, exdataLen1, RxData); if (ret == 0) { string secondAction = "00A40000023F20"; sendData = System.Text.Encoding.ASCII.GetBytes(secondAction); int ret2 = CRT603.CRT603Vx_RF_SendApdu(sendData.Length, sendData, exdataLen1, RxData); if (ret2 == 0) { string thirdAction = "00B0950000"; sendData = System.Text.Encoding.ASCII.GetBytes(thirdAction); int ret3 = CRT603.CRT603Vx_RF_SendApdu(sendData.Length, sendData, exdataLen1, RxData); string strRecv3 = ""; for (int i = 0; i < exdataLen1[0]; i++) { strRecv3 += string.Format("{0:X2}", RxData[i]); } //CRT603.CRT603Vx_CloseConnection(); if (strRecv3.Length == 0) { return(null); } string result = DecryptCardNo(strRecv3); if (result == null) { return(null); } return(result); } } //CRT603.CRT603Vx_CloseConnection(); return(null); } catch (Exception e) { log.Write("error:读取万通卡异常:" + e.Message); return(null); } }
/// <summary> /// 测试公交读卡器 /// </summary> /// <returns></returns> private bool testCRT603() { string port = SysConfigHelper.readerNode("CRT603Port");// int openRet = CRT603.CRT603Vx_OpenConnection(Int32.Parse(port), 19200); if (openRet != 0) { logger("error:公交读卡器打开失败!"); return(false); } return(true); }
//public override Card getCardInfo(string cardNo) //{ // //TODO 查询公交卡信息 // return null; //} //public override bool Recharge(string cardNo, int gasValue) //{ // throw new NotImplementedException(); //} //public override bool Recharge(string cardNo, double moneyCount) //{ // //TODO 调用拉卡拉消费 // //TODO 调用拉卡拉消费,如果支付失败,提示错误,退出方法 // //TODO 调用拉卡拉消费,如果支付成功,调用北科维拓公交缴费接口,完成充值 // return false; //} /// <summary> /// 通过读卡器,读取公交卡卡号 /// </summary> /// <returns></returns> public string GetCardNo() { try { string port = SysConfigHelper.readerNode("CRT603Port"); //int openRet = CRT603.CRT603Vx_OpenConnection(Int32.Parse(port), 19200); //上电 int iOutAtrLen = 0; byte[] byOutAtrData = new byte[1024]; int chipRet = CRT603.CRT603Vx_RF_chipPower(ref iOutAtrLen, byOutAtrData); string firstAction = "00A40000023F00"; Byte[] sendData = System.Text.Encoding.ASCII.GetBytes(firstAction); int[] exdataLen1 = new int[2]; Byte[] RxData = new Byte[1024]; int ret = CRT603.CRT603Vx_RF_SendApdu(sendData.Length, sendData, exdataLen1, RxData); if (ret == 0) { string secondAction = "00B0850000"; sendData = System.Text.Encoding.ASCII.GetBytes(secondAction); int ret2 = CRT603.CRT603Vx_RF_SendApdu(sendData.Length, sendData, exdataLen1, RxData); string strRecv2 = ""; for (int i = 0; i < exdataLen1[0]; i++) { strRecv2 += string.Format("{0:X2}", RxData[i]); } //CRT603.CRT603Vx_CloseConnection(); string no = strRecv2.Substring(16, 16); if (no == null) { throw new Exception("系统异常"); } return(no); } throw new Exception(); } catch (WtException e) { throw e; } catch (Exception ex) { throw new Exception("系统异常"); } finally { //CRT603.CRT603Vx_CloseConnection(); } }
/// <summary> /// 公交读卡器打卡端口失败时发送状态 , /// </summary> public static string SendCRT603State() { string port = SysConfigHelper.readerNode("CRT603Port"); CRT603.CRT603Vx_CloseConnection(); int handle = CRT603.CRT603Vx_OpenConnection(Int32.Parse(port), 19200); //CRT603.CRT603Vx_CloseConnection(); if (handle != 0) { return("030001"); } return(null); }
/// <summary> /// 公交卡查询 /// </summary> /// <returns></returns> public static BusQueryThatInfo QueryBus() { bool isSuccess = false; //签到 BusRegisterInfo busRegisterInfo = BusAccess.BusRegister(); if (busRegisterInfo.cpumsg != null) { isSuccess = true; } //公交卡签到未成功 if (isSuccess == false) { throw new Exception("公交卡签到未成功"); } isSuccess = false; BusQueryInfo busQueryInfo = new BusQueryInfo(); //公交卡查询 BusInterface access = new BusInterface(); BusQueryParam param = new BusQueryParam(); string inapdu = ""; string trandateTime = SysBLL.getYYYYMMDDHHMMSSTime(); string reqsn = SysBLL.getSerialNum(); string APDUDATA = ""; string APDUSW = ""; string RETDATA = ""; int APDUSUM = 0; string step = "0"; param.authcode = SysBLL.Authcode; param.servicename = "DS001"; param.trandateTime = trandateTime; param.reqsn = reqsn; param.opno = busRegisterInfo.cpumsg.OUTPUT.OPNO; param.scode = busRegisterInfo.cpumsg.OUTPUT.SCODE; param.terno = SysBLL.getMac(); param.tradeno = SysBLL.getHHMMSSITime10(); param.btype = "1900"; param.inapdu = inapdu; param.step = step; param.loginId = SysBLL.getCpuNo(); //设备ID busQueryInfo = access.BusQuery1(param); if (busQueryInfo.cpumsg.OUTPUT.OUTAPDU.APDU != null) { isSuccess = true; } //公交查询未成功 if (isSuccess == false) { throw new Exception("公交查询未成功"); } isSuccess = false; step = busQueryInfo.cpumsg.OUTPUT.STEP; string status = busQueryInfo.cpumsg.OUTPUT.OUTAPDU.LASTAPDU; BusCardBLL bus = new BusCardBLL(); string port = SysConfigHelper.readerNode("CRT603Port"); //int openRet = CRT603.CRT603Vx_OpenConnection(Int32.Parse(port), 19200); //上电 int iOutAtrLen = 0; byte[] byOutAtrData = new byte[1024]; int chipRet = CRT603.CRT603Vx_RF_chipPower(ref iOutAtrLen, byOutAtrData); string apduData = ""; List <BusQueryApdu> apdu = busQueryInfo.cpumsg.OUTPUT.OUTAPDU.APDU; string result = ""; string last = ""; for (int i = 0; i < apdu.Count; i++) { APDUDATA = APDUDATA + apdu[i].APDUDATA + "|"; result = bus.sendApdu(apdu[i].APDUDATA); last = result.Substring(result.Length - 4); APDUSW = APDUSW + last + "|"; result = result.Remove(result.Length - 4, 4); if (apduData != null) { RETDATA = RETDATA + result + "|"; } Thread.Sleep(20); APDUSUM++; } //CRT603.CRT603Vx_CloseConnection(); APDUDATA = APDUDATA.Remove(APDUDATA.Length - 1, 1); APDUSW = APDUSW.Remove(APDUSW.Length - 1, 1); RETDATA = RETDATA.Remove(RETDATA.Length - 1, 1); BusQueryThatInfo busQueryInfo2 = null; while (true) { param.inapdu = "yes"; param.step = step; param.APDUSUM = APDUSUM.ToString(); param.APDUDATA = APDUDATA; param.APDUSW = APDUSW; param.RETDATA = RETDATA; //表示最后一条 if (status.Equals("01")) { //结果 busQueryInfo2 = access.BusQuery2(param); //处理结果 return(busQueryInfo2); } //继续查询 busQueryInfo2 = access.BusQuery2(param); if (busQueryInfo2.cpumsg.OUTPUT != null) { isSuccess = true; } //公交查询未成功 if (isSuccess == false) { throw new Exception("公交查询未成功"); } isSuccess = false; APDUDATA = ""; APDUSW = ""; RETDATA = ""; List <BusQueryApdu> apdu2 = busQueryInfo.cpumsg.OUTPUT.OUTAPDU.APDU; for (int i = 0; i < apdu.Count; i++) { APDUDATA = APDUDATA + apdu2[i].APDUDATA + "|"; result = bus.sendApdu(apdu2[i].APDUDATA); last = result.Substring(result.Length - 4); result = result.Remove(result.Length - 4, 4); APDUSW = last + APDUSW + "|"; //执行apdu RETDATA = RETDATA + result + "|"; } APDUDATA = APDUDATA.Remove(APDUDATA.Length - 1, 1); APDUSW = APDUSW.Remove(APDUSW.Length - 1, 1); RETDATA = RETDATA.Remove(RETDATA.Length - 1, 1); step = busQueryInfo.cpumsg.OUTPUT.STEP; status = busQueryInfo.cpumsg.OUTPUT.OUTAPDU.LASTAPDU; } }
public static BusCpuCardInfo ReCharge(BusCpuCardInfo busCpuCardInfo1, BusCpuCardParam param) { try{ BusInterface access = new BusInterface(); Boolean isSuccess = false; if (busCpuCardInfo1.cpumsg.OUTPUT.OUTAPDU != null) { isSuccess = true; } if (isSuccess == false) { throw new WtException(WtExceptionCode.Bus.BUS_PAY); } isSuccess = false; param.orderno = busCpuCardInfo1.msgrsp.orderno; //订单编号 null 循环最后一步传递 param.payCode = "Z000000004"; //支付渠道编码 null 循环最后一步传递 param.trandeNo = SysBLL.getSerialNum(); //支付渠道交易流水号 null 循环最后一步传递 param.inapdu = "yes"; //指令 不定 第一步不需要传,当服务端有 OUTAPDU 指令后,将 OUTAPDU 指令执行并上传 INAPDU 指令 string status = busCpuCardInfo1.cpumsg.OUTPUT.OUTAPDU.LASTAPDU; param.step = busCpuCardInfo1.cpumsg.OUTPUT.STEP; //执行指令 BusCardBLL bus = new BusCardBLL(); string port = SysConfigHelper.readerNode("CRT603Port"); //int openRet = CRT603.CRT603Vx_OpenConnection(Int32.Parse(port), 19200); //上电 int iOutAtrLen = 0; byte[] byOutAtrData = new byte[1024]; int chipRet = CRT603.CRT603Vx_RF_chipPower(ref iOutAtrLen, byOutAtrData); string apduData = ""; string APDUDATA = ""; string APDUSW = ""; string RETDATA = ""; int APDUSUM = 0; string result = ""; string last = ""; List <BusCpuCardAPDU> apdu = busCpuCardInfo1.cpumsg.OUTPUT.OUTAPDU.APDU; for (int i = 0; i < apdu.Count; i++) { APDUDATA = APDUDATA + apdu[i].APDUDATA + "|"; result = bus.sendApdu(apdu[i].APDUDATA); last = result.Substring(result.Length - 4); APDUSW = APDUSW + last + "|"; result = result.Remove(result.Length - 4, 4); if (result.Length == 0) { result = last; } if (apduData != null) { RETDATA = RETDATA + result + "|"; } Thread.Sleep(10); APDUSUM++; } //CRT603.CRT603Vx_CloseConnection(); APDUDATA = APDUDATA.Remove(APDUDATA.Length - 1, 1); APDUSW = APDUSW.Remove(APDUSW.Length - 1, 1); RETDATA = RETDATA.Remove(RETDATA.Length - 1, 1); BusCpuCardInfo busCpuCardInfo2 = null; while (true) { param.APDUDATA = APDUDATA; param.APDUSW = APDUSW; param.RETDATA = RETDATA; param.APDUSUM = APDUSUM.ToString(); if ("-1".Equals(param.step)) { busCpuCardInfo2.msgrsp.Tac = param.RETDATA; } //结果 if (status.Equals("01")) { busCpuCardInfo2 = access.BusCpuCard(param); return(busCpuCardInfo2); } busCpuCardInfo2 = access.BusCpuCard(param); if (busCpuCardInfo2.cpumsg.OUTPUT.OUTAPDU != null) { isSuccess = true; } if (isSuccess == false) { throw new WtException(WtExceptionCode.Bus.BUS_PAY); } isSuccess = false; APDUDATA = ""; APDUSW = ""; RETDATA = ""; APDUSUM = 0; List <BusCpuCardAPDU> apdu2 = busCpuCardInfo2.cpumsg.OUTPUT.OUTAPDU.APDU; for (int i = 0; i < apdu2.Count; i++) { APDUDATA = APDUDATA + apdu2[i].APDUDATA + "|"; result = bus.sendApdu(apdu2[i].APDUDATA); last = result.Substring(result.Length - 4); result = result.Remove(result.Length - 4, 4); APDUSW = last + APDUSW + "|"; //执行apdu RETDATA = RETDATA + result + "|"; APDUSUM++; } APDUDATA = APDUDATA.Remove(APDUDATA.Length - 1, 1); APDUSW = APDUSW.Remove(APDUSW.Length - 1, 1); RETDATA = RETDATA.Remove(RETDATA.Length - 1, 1); param.step = busCpuCardInfo2.cpumsg.OUTPUT.STEP; status = busCpuCardInfo2.cpumsg.OUTPUT.OUTAPDU.LASTAPDU; } } catch { return(null); } }