示例#1
0
        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("系统异常");
            }
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        /// <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);
        }
示例#4
0
        //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();
            }
        }
示例#5
0
        /// <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);
        }
示例#6
0
        /// <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;
            }
        }
示例#7
0
        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); }
        }