/// <summary> /// 进行天线扣款操作 /// </summary> /// <param name="money"></param> /// <returns></returns> public int DoRSUPay(int money) { ETCResponse r = RSUOpen(); if (r != null && r.ErrorCode == 0) { r = OBUSearch(); } if (r != null && r.ErrorCode == 0) { r = GetOBUInfo(r as OBUSearchResponse); } if (r != null && r.ErrorCode == 0) { ETCPaymentRecord record = null; r = RSUWriteCard(r as GetOBUInfoResponse, money, out record); if (record != null) { r = ListUpLoad(record); } } if (r != null) { return(r.ErrorCode); } return(-1); }
private ETCPaymentRecord CreateRecord(GetCardInfoResponse cardInfo, WriteCardResponse writeInfo) { var ret = new ETCPaymentRecord() { ListType = IsExit ? 1 : 0, ListNo = string.Format("{0}{1}{2}{3}{4}{5}{6}", ProvinceNo, CityNo, AreaNo, GateNo, LaneNo, DateTime.Now.ToString("yyyyMMddHHmmss"), "00"), KeyServiceNo = writeInfo.KeyServiceNo, TradeType = writeInfo.TradeType, TermCode = writeInfo.TermCode, TermTradeNo = writeInfo.TermTradeNo, CardTradeNo = writeInfo.CardTradeNo, Tac = writeInfo.Tac, OBUID = null, OBUNO = null, CardNo = cardInfo.CardNo, CashMoney = writeInfo.CashMoney, Balance = writeInfo.Balance, TradeDevice = 1, VehPicture = null, VehPictureLen = 0, SquadDate = DateTime.Today.ToString("yyyyMMdd"), ShiftID = DateTime.Today.ToString("yyMMdd"), ExTime = IsExit ? DateTime.Now.ToString("yyyyMMddHHmmss") : null, ExAreaNo = IsExit ? AreaNo : null, ExGateNo = IsExit ? GateNo : null, ExLaneNo = IsExit ? LaneNo : null, ExOperatorNo = IsExit ? "ffff" : null, ExVehPlate = IsExit ? cardInfo.CardPlate : null, ExVehType = IsExit ? cardInfo.CardVehClass : "255", ExVehClass = IsExit ? cardInfo.CardVehUserType : "255", EnTime = IsExit ? cardInfo.PassTime : DateTime.Now.ToString("yyyyMMddHHmmss"), EnOperatorNo = IsExit ? cardInfo.OperatorNo : "000001", EnAreaNo = IsExit ? cardInfo.CardAreaNo : AreaNo, EnGateNo = IsExit ? cardInfo.CardGateNo : GateNo, EnLaneNo = IsExit ? cardInfo.CardLaneNo : LaneNo, EnVehPlate = IsExit ? cardInfo.VehPlate : cardInfo.CardPlate, EnVehType = IsExit ? cardInfo.VehType : cardInfo.CardVehClass, EnVehClass = IsExit ? cardInfo.VehClass : cardInfo.CardVehUserType, }; if (!string.IsNullOrEmpty(ret.ExGateNo) && ret.ExGateNo.Length > 2) { ret.ExGateNo = ret.ExGateNo.Substring(2); } if (!string.IsNullOrEmpty(ret.ExLaneNo) && ret.ExLaneNo.Length > 2) { ret.ExLaneNo = ret.ExLaneNo.Substring(2); } if (!string.IsNullOrEmpty(ret.EnGateNo) && ret.EnGateNo.Length > 2) { ret.EnGateNo = ret.EnGateNo.Substring(2); } if (!string.IsNullOrEmpty(ret.EnLaneNo) && ret.EnLaneNo.Length > 2) { ret.EnLaneNo = ret.EnLaneNo.Substring(2); } return(ret); }
private ETCResponse ListUpLoad(ETCPaymentRecord record) { StringBuilder response = new StringBuilder(100); var request = new { UserName = UserName, ProvinceNo = ProvinceNo, CityNo = CityNo, ListType = record.ListType.ToString(), ListNo = record.ListNo, KeyServiceNo = record.KeyServiceNo, TradeType = record.TradeType.ToString(), TermCode = record.TermCode, TermTradeNo = record.TermTradeNo, CardTradeNo = record.CardTradeNo, Tac = record.Tac, OBUID = record.OBUID == null ? string.Empty : record.OBUID, OBUNO = record.OBUNO == null ? string.Empty : record.OBUNO, CardNo = record.CardNo, CashMoney = record.CashMoney.ToString(), Balance = record.Balance.ToString(), TradeDevice = record.TradeDevice.ToString(), VehPicture = record.VehPicture, VehPictureLen = record.VehPictureLen.ToString(), SquadDate = record.SquadDate, ShiftID = record.ShiftID, ExTime = record.ExTime, ExAreaNo = record.ExAreaNo, ExGateNo = record.ExGateNo, ExLaneNo = record.ExLaneNo, ExOperatorNo = record.ExOperatorNo, ExVehPlate = record.ExVehPlate, ExVehType = record.ExVehType, ExVehClass = record.ExVehClass, EnTime = record.EnTime, EnOperatorNo = record.EnOperatorNo, EnAreaNo = record.EnAreaNo, EnGateNo = record.EnGateNo, EnLaneNo = record.EnLaneNo, EnVehPlate = record.EnVehPlate, EnVehType = record.EnVehType, EnVehClass = record.EnVehClass, }; var n = ETCInterop.ListUpLoad(int.Parse(LaneNo), JsonConvert.SerializeObject(request), response); if (n != 0) { return new ETCResponse() { ErrorCode = n } } ; var ret = JsonConvert.DeserializeObject <WriteCardResponse>(response.ToString()); ret.Content = response.ToString(); return(ret); }
/// <summary> /// 进行读卡扣款操作 /// </summary> /// <param name="money"></param> /// <returns></returns> public int DoReaderPay(int money) { ETCResponse r = CardReaderOpen(); if (r != null && r.ErrorCode == 0) { r = CardSearch(); } if (r != null && r.ErrorCode == 0) { r = GetCardInfoFromReader(r as CardSearchResponse); } if (r != null && r.ErrorCode == 0) { ETCPaymentRecord record = null; r = CardReaderWriteCard(r as GetCardInfoResponse, money, out record); if (record != null) { r = ListUpLoad(record); } } return(r.ErrorCode); }
private WriteCardResponse CardReaderWriteCard(GetCardInfoResponse r, int money, out ETCPaymentRecord record) { int n = -1; record = null; WriteCardResponse ret = null; StringBuilder response = new StringBuilder(3000); if (UseInGD) { var request = new { UserName = UserName, PassWord = Password, ProvinceNo = ProvinceNo, CityNo = CityNo, AreaNo = AreaNo, GateNo = GateNo, LaneNo = LaneNo, CardNo = r.CardNo, CashMoney = money.ToString(), CardAreaNo = AreaNo, CardGateNo = GateNo.PadLeft(4, '0'), CardLaneNo = LaneNo.PadLeft(4, '0'), PassTime = DateTime.Now.ToString("yyyyMMddHHmmss"), VehPlate = r.CardPlate, VehType = r.CardVehClass, VehClass = r.CardVehUserType, OutFlag = IsExit ? "1" : "0", OperatorNo = "ffff", LittleGateNo = r.LittleGateNo, LittleLaneNo = r.LittleLaneNo, LittlePassTime = r.LittlePassTime, LittleCashMoney = r.LittleCashMoney, LittleTime = r.LittleTime, OfferType = r.OfferType, OfferTime = r.OfferTime, BackUp = r.BackUp == null ? string.Empty : r.BackUp, //不能传NULL CheckCode = r.CheckCode, ReaderID = EcReaderID }; n = ETCInterop.CardReaderWriteCard_GD(int.Parse(LaneNo), JsonConvert.SerializeObject(request), response); if (n != 0) { return new WriteCardResponse() { ErrorCode = n } } ; ret = JsonConvert.DeserializeObject <WriteCardResponse>(response.ToString()); ret.Content = response.ToString(); } else { var request = new { UserName = UserName, PassWord = Password, ProvinceNo = ProvinceNo, CityNo = CityNo, AreaNo = AreaNo, GateNo = GateNo, LaneNo = LaneNo, CardNo = r.CardNo, CashMoney = money, CardAreaNo = AreaNo, CardGateNo = GateNo.PadLeft(4, '0'), CardLaneNo = LaneNo.PadLeft(4, '0'), PassTime = DateTime.Now.ToString("yyyyMMddHHmmss"), VehPlate = r.CardPlate, VehType = r.CardVehClass, VehClass = r.CardVehUserType, OutFlag = IsExit ? "1" : "0", OperatorNo = "ffff", ReaderID = EcReaderID }; n = ETCInterop.CardReaderWriteCard(int.Parse(LaneNo), JsonConvert.SerializeObject(request), response); if (n != 0) { return new WriteCardResponse() { ErrorCode = n } } ; ret = JsonConvert.DeserializeObject <WriteCardResponse>(response.ToString()); ret.Content = response.ToString(); } if (ret.ErrorCode == -2320) //半条记录的情况,需要验证 { response = new StringBuilder(1000); var request = new { UserName = UserName, ProvinceNo = ProvinceNo, CityNo = CityNo, AreaNo = AreaNo, GateNo = GateNo, LaneNo = LaneNo, CardNo = r.CardNo, RelyServiceNo = ret.KeyServiceNo, ReaderID = EcReaderID }; n = ETCInterop.CardReaderTransActionProve(int.Parse(LaneNo), JsonConvert.SerializeObject(request), response); if (n != 0) { return new WriteCardResponse { ErrorCode = n } } ; ret = JsonConvert.DeserializeObject <WriteCardResponse>(response.ToString()); ret.Content = response.ToString(); } if (ret.ErrorCode == 0) { ret.CashMoney = money; //这两个属性返回串中没有,人为加上去,后面有用! ret.Balance = r.Balance - money; record = CreateRecord(r, ret); } return(ret); }