コード例 #1
0
        /// <summary>
        /// 询卡
        /// </summary>
        /// <returns></returns>
        public YCTWallet Poll()
        {
            var response = Request(YCTCommandType.Poll, null);

            if (response != null && response.IsCommandExcuteOk && response.Data != null && response.Data.Length == 52)
            {
                byte[]    data = response.Data;
                YCTWallet w    = new YCTWallet();
                w.WalletType = data[0];
                if (w.WalletType == 1)
                {
                    w.PhysicalCardID = HexStringConverter.HexToString(Slice(data, 1, 4), string.Empty); //M1钱包物理卡只取前四字节
                }
                else
                {
                    w.PhysicalCardID = HexStringConverter.HexToString(Slice(data, 1, 8), string.Empty);
                }
                w.LogicCardID = HexStringConverter.HexToString(Slice(data, 9, 8), string.Empty);
                w.Balance     = BEBinaryConverter.BytesToInt(Slice(data, 17, 4));
                w.Count       = BEBinaryConverter.BytesToInt(Slice(data, 21, 2));
                w.CardType    = HexStringConverter.HexToString(Slice(data, 23, 2), string.Empty);
                w.MinBalance  = data[25] * 100;
                w.MaxBalance  = BEBinaryConverter.BytesToInt(Slice(data, 26, 3));
                w.Deposit     = BEBinaryConverter.BytesToInt(Slice(data, 29, 4));
                if (w.WalletType == 2)
                {
                    w.Balance -= w.MinBalance;                    //CPU钱包可用余额为余额减去最小余额
                }
                return(w);
            }
            return(null);
        }
コード例 #2
0
 private YCTPaymentInfo GetPaymentInfoFromCPU(YCTPacket packet)
 {
     byte[] data = packet.Data; //86字节
     if (data == null || data.Length == 0)
     {
         return(null);
     }
     try
     {
         YCTPaymentInfo payment = new YCTPaymentInfo();
         payment.本次交易设备编号   = HexStringConverter.HexToString(Slice(data, 0, 6), string.Empty);
         payment.终端交易流水号    = BEBinaryConverter.BytesToInt(Slice(data, 6, 4));
         payment.本次交易日期时间   = DateTime.ParseExact(HexStringConverter.HexToString(Slice(data, 10, 7), string.Empty), "yyyyMMddHHmmss", null);
         payment.逻辑卡号       = HexStringConverter.HexToString(Slice(data, 17, 8), string.Empty);
         payment.物理卡号       = HexStringConverter.HexToString(Slice(data, 25, 8), string.Empty);
         payment.交易金额       = BEBinaryConverter.BytesToInt(Slice(data, 33, 4));
         payment.票价         = BEBinaryConverter.BytesToInt(Slice(data, 37, 4));
         payment.本次余额       = BEBinaryConverter.BytesToInt(Slice(data, 41, 4));
         payment.交易类型       = Slice(data, 45, 1)[0];
         payment.附加交易类型     = Slice(data, 46, 1)[0];
         payment.票卡充值交易计数   = BEBinaryConverter.BytesToInt(Slice(data, 47, 2));
         payment.票卡消费交易计数   = BEBinaryConverter.BytesToInt(Slice(data, 49, 2));
         payment.累计门槛月份     = HexStringConverter.HexToString(Slice(data, 51, 2), string.Empty);
         payment.公交门槛计数     = Slice(data, 53, 1)[0];
         payment.地铁门槛计数     = Slice(data, 54, 1)[0];
         payment.联乘门槛计数     = Slice(data, 55, 1)[0];
         payment.本次交易入口设备编号 = HexStringConverter.HexToString(Slice(data, 56, 6), string.Empty);
         payment.本次交易入口日期时间 = HexStringConverter.HexToString(Slice(data, 62, 7), string.Empty);
         payment.次交易设备编号    = HexStringConverter.HexToString(Slice(data, 69, 6), string.Empty);
         payment.次交易日期时间    = HexStringConverter.HexToString(Slice(data, 75, 4), string.Empty);
         payment.区域代码       = HexStringConverter.HexToString(Slice(data, 79, 1), string.Empty);
         payment.区域卡类型      = HexStringConverter.HexToString(Slice(data, 80, 2), string.Empty);
         payment.区域子码       = HexStringConverter.HexToString(Slice(data, 82, 1), string.Empty);
         payment.交易认证码      = HexStringConverter.HexToString(Slice(data, 83, 4), string.Empty);
         return(payment);
     }
     catch (Exception ex)
     {
         Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex);
     }
     return(null);
 }
コード例 #3
0
ファイル: YCTPOS.cs プロジェクト: josephca88/510-Null
        /// <summary>
        /// 询卡
        /// </summary>
        /// <returns></returns>
        public YCTWallet ReadCard(WegenType wg = WegenType.Wengen34)
        {
            var response = Request(YCTCommandType.Poll, null);

            if (response != null && response.IsCommandExcuteOk && response.Data != null && response.Data.Length == 52)
            {
                byte[]    data = response.Data;
                YCTWallet w    = new YCTWallet();
                w.WalletType = data[0];
                if (w.WalletType == 1)
                {
                    w.PhysicalCardID = HexStringConverter.HexToString(Slice(data, 1, 4), string.Empty); //M1钱包物理卡只取前四字节
                }
                else
                {
                    w.PhysicalCardID = HexStringConverter.HexToString(Slice(data, 1, 8), string.Empty);
                }
                w.LogicCardID = HexStringConverter.HexToString(Slice(data, 9, 8), string.Empty);
                w.Balance     = BEBinaryConverter.BytesToInt(Slice(data, 17, 4));
                w.Count       = BEBinaryConverter.BytesToInt(Slice(data, 21, 2));
                w.CardType    = HexStringConverter.HexToString(Slice(data, 23, 2), string.Empty);
                w.MinBalance  = data[25] * 100;
                w.MaxBalance  = BEBinaryConverter.BytesToInt(Slice(data, 26, 3));
                w.Deposit     = BEBinaryConverter.BytesToInt(Slice(data, 29, 4));
                _LastWallet   = w;
                return(w);
            }
            else if (LastError == 0x83) //验证出错,说明卡片是其它IC卡,继续读其序列号
            {
                string sn = ReadSN(wg == WegenType.Wengen26 ? 1 : 0);
                if (sn != null)
                {
                    _LastWallet = new YCTWallet()
                    {
                        LogicCardID = sn, PhysicalCardID = sn, CardType = string.Empty
                    };
                    return(_LastWallet);
                }
            }
            return(null);
        }
コード例 #4
0
 private YCTPaymentInfo GetPaymentInfoFromM1(YCTPacket packet)
 {
     byte[] data = packet.Data; //73个字节
     if (data == null || data.Length == 0)
     {
         return(null);
     }
     try
     {
         YCTPaymentInfo payment = new YCTPaymentInfo();
         payment.终端交易流水号    = BEBinaryConverter.BytesToInt(Slice(data, 0, 4));
         payment.逻辑卡号       = HexStringConverter.HexToString(Slice(data, 4, 8), string.Empty);
         payment.物理卡号       = HexStringConverter.HexToString(Slice(data, 12, 4), string.Empty);
         payment.次交易设备编号    = HexStringConverter.HexToString(Slice(data, 16, 4), string.Empty);
         payment.次交易日期时间    = HexStringConverter.HexToString(Slice(data, 20, 7), string.Empty);
         payment.本次交易设备编号   = HexStringConverter.HexToString(Slice(data, 27, 4), string.Empty);
         payment.本次交易日期时间   = DateTime.ParseExact(HexStringConverter.HexToString(Slice(data, 31, 7), string.Empty), "yyyyMMddHHmmss", null);
         payment.交易金额       = BEBinaryConverter.BytesToInt(Slice(data, 38, 4));
         payment.本次余额       = BEBinaryConverter.BytesToInt(Slice(data, 42, 4));
         payment.票价         = BEBinaryConverter.BytesToInt(Slice(data, 46, 4));
         payment.交易类型       = Slice(data, 50, 1)[0];
         payment.票卡消费交易计数   = BEBinaryConverter.BytesToInt(Slice(data, 51, 2));
         payment.累计门槛月份     = HexStringConverter.HexToString(Slice(data, 53, 2), string.Empty);
         payment.公交门槛计数     = Slice(data, 55, 1)[0];
         payment.地铁门槛计数     = Slice(data, 56, 1)[0];
         payment.联乘门槛计数     = Slice(data, 57, 1)[0];
         payment.本次交易入口设备编号 = HexStringConverter.HexToString(Slice(data, 58, 4), string.Empty);
         payment.本次交易入口日期时间 = HexStringConverter.HexToString(Slice(data, 62, 7), string.Empty);
         payment.交易认证码      = HexStringConverter.HexToString(Slice(data, 69, 4), string.Empty);
         return(payment);
     }
     catch (Exception ex)
     {
         Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex);
     }
     return(null);
 }