/// <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); }
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); }
/// <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); }
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); }