private void HandleWallet(LR280Item item, LR280Response w) { EntranceInfo entrance = item.EntranceID.HasValue ? ParkBuffer.Current.GetEntrance(item.EntranceID.Value) : null; OpenCardEventArgs args = new OpenCardEventArgs() { CardID = w.卡号, CardType = LR280Setting.CardTyte, Entrance = entrance, Balance = (decimal)w.金额 / 100, }; if (args.CardType == LR280Setting.CardTyte) { ParkInfo p = ParkBuffer.Current.GetPark(entrance.ParkID); CardInfo card = (new CardBll(AppSettings.CurrentSetting.ParkConnect)).GetCardByID(w.卡号).QueryObject; if (card != null && card.CardType.Name == LR280Setting.CardTyte && (entrance == null || (!p.IsNested && entrance.IsExitDevice))) ////中央收费处和非嵌套车场的出口,则进行收费处理 { HandlePayment(item, w, args); } else { if (this.OnReadCard != null) { this.OnReadCard(this, args); } } } }
private LR280Response GetResponse(byte[] val) { if (val == null || val.Length == 0) { return(null); } var str = System.Text.ASCIIEncoding.Default.GetString(val); LR280Response ret = new LR280Response(); ret.返回码 = Encoding.GetEncoding("GB2312").GetString(val, 0, 2).Trim(); ret.交易类型 = Encoding.GetEncoding("GB2312").GetString(val, 2, 2).Trim(); ret.银行行号 = Encoding.GetEncoding("GB2312").GetString(val, 4, 4).Trim(); ret.卡号 = Encoding.GetEncoding("GB2312").GetString(val, 8, 20).Trim(); ret.凭证号 = Encoding.GetEncoding("GB2312").GetString(val, 28, 6).Trim(); int m; var temp = Encoding.GetEncoding("GB2312").GetString(val, 34, 12).TrimStart('0'); if (int.TryParse(temp, out m)) { ret.金额 = m; } ret.错误说明 = Encoding.GetEncoding("GB2312").GetString(val, 46, 40); ret.商户号 = Encoding.GetEncoding("GB2312").GetString(val, 86, 15); ret.终端号 = Encoding.GetEncoding("GB2312").GetString(val, 101, 8); ret.批次号 = Encoding.GetEncoding("GB2312").GetString(val, 109, 6); ret.交易日期 = Encoding.GetEncoding("GB2312").GetString(val, 115, 4); ret.交易时间 = Encoding.GetEncoding("GB2312").GetString(val, 119, 6); ret.交易参考号 = Encoding.GetEncoding("GB2312").GetString(val, 125, 12); ret.授权号 = Encoding.GetEncoding("GB2312").GetString(val, 137, 6); ret.清算日期 = Encoding.GetEncoding("GB2312").GetString(val, 143, 4); ret.LRC校验 = Encoding.GetEncoding("GB2312").GetString(val, 147, 3); return(ret); }
private void HandlePayment(LR280Item item, LR280Response w, OpenCardEventArgs args) { if (this.OnPaying != null) { this.OnPaying(this, args); //产生收费事件 } if (args.Payment == null) { return; } if (args.Payment.GetPaying() <= 0) //不用收费直接返回收款成功事件 { args.Payment.PaymentCode = Ralid.Park.BusinessModel.Enum.PaymentCode.Computer; args.Payment.PaymentMode = Ralid.Park.BusinessModel.Enum.PaymentMode.UnionPay; if (this.OnPaidOk != null) { this.OnPaidOk(this, args); } } else //扣费 { //判断余额是否够扣费,否则返回"余额不足",注意钱包单位是分的,这里要转成分比较 //因为CPU钱包里有一个余额下限,余额下限是不允许扣费的,如果不比较费用和余额,有可以会扣到余额下限 int fee = (int)(args.Payment.GetPaying() * 100); if (fee <= w.金额) { var r = item.Reader.Pay(w.卡号, fee); if (r.返回码 == "00") { args.Paid = args.Payment.GetPaying(); args.Payment.PaymentCode = Ralid.Park.BusinessModel.Enum.PaymentCode.Computer; args.Payment.PaymentMode = Ralid.Park.BusinessModel.Enum.PaymentMode.UnionPay; args.Balance = (decimal)(w.金额 - fee) / 100; if (this.OnPaidOk != null) { this.OnPaidOk(this, args); } } else { args.LastError = string.Format("错误{0}:{1}", r.返回码, r.错误说明); if (this.OnPaidFail != null) { this.OnPaidFail(this, args); } } } else { args.LastError = "余额不足"; if (this.OnPaidFail != null) { this.OnPaidFail(this, args); } } } }