Пример #1
0
        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);
                    }
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
 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);
             }
         }
     }
 }