예제 #1
0
파일: PayUntity.cs 프로젝트: ghbylmt/LsPay
        /// <summary>
        /// 签到获取密钥
        /// </summary>
        /// <returns></returns>
        public SignResponseModel Sign(VisualSelfServiceEquipment equipment)
        {
            Bitmap map = new Bitmap();

            map[11] = map[41] = map[42] = map[60] = map[63] = true;
            Iso8583 iso8583 = new Iso8583(map);

            iso8583[11].Content  = Settings.SysTraceNum;
            Settings.SysTraceNum = (Convert.ToInt32(Settings.SysTraceNum) + 1).ToString().PadLeft(6, '0');
            iso8583[41].Content  = equipment.TerminalNo;// Settings.TerminalNo;
            iso8583[42].Content  = Settings.MerchantCode;
            iso8583[60].FieldLenIndicator.Content = "011";
            iso8583[60].Content = "00003010003";
            iso8583[63].FieldLenIndicator.Content = "003";
            iso8583[63].Content = "001";
            Message msg = new Message(iso8583);

            msg.TPDU.Content        = Settings.TPDU;
            msg.MessageHead.Content = Settings.MsgHead;
            msg.MessageType.Content = "0800";
            Iso8583 Res_iso8583 = new Iso8583();
            Message Res_Msg     = new Message(Res_iso8583);

            Res_Msg.Unpack(msg.Send(Settings.BankIp, Convert.ToInt32(Settings.BankPort)));
            SignResponseModel responseModel = new SignResponseModel()
            {
                ResponseCode = Res_iso8583[39].Content
            };

            if (responseModel.ResponseCode == "00")
            {
                responseModel.Content = BitConverter.ToString(Res_iso8583[62].Pack()).Replace("-", "");
            }
            return(responseModel);
        }
예제 #2
0
        public byte[] Pay(VisualSelfServiceEquipment equipment)
        {
            if (equipment == null)
            {
                throw new ArgumentException("无效的设备信息");
            }
            IPayPreTeatment payPreObj =
                PaymentPlatFormFactory.GetPayPreTreatmentFactory().GetPayPreObj(equipment.creditCard);

            return(payPreObj.Pay(equipment.TerminalNo, equipment.PayMoney, equipment.PinBlock, equipment.creditCard));
        }
예제 #3
0
 /// <summary>
 /// 查询
 /// </summary>
 /// <returns></returns>
 public PayResponseModel Query(string pin)
 {
     try
     {
         if (M100.CardContainer.Count < 1)
         {
             throw new ApplicationException("查询失败,卡机内无卡!");
         }
         string pinBlock = "";
         if (string.IsNullOrEmpty(pin))
         {
             pinBlock = this.IEncry.GetPinBlock();
         }
         else
         {
             pinBlock = CalculatePinBlock(M100.CacheCard.CardNo, pin);
         }
         //2磁道数据加密
         M100.CardContainer[0].Msg2 = CalculateTrackBlock(M100.CacheCard.Msg2);
         //主账号数据加密
         M100.CardContainer[0].CardNo = CalculateTrackBlock(M100.CacheCard.CardNo);
         //虚拟设备对象
         VisualSelfServiceEquipment equipment = new VisualSelfServiceEquipment()
         {
             creditCard = M100.CardContainer[0],
             TerminalNo = Settings.TerminalNo,
             PinBlock   = pinBlock,
             PayMoney   = "000000000000"
         };
         //针对查询交易存储临时交易预处理信息,无需冲正
         var tempPreMsg          = ServiceUtil.PayPreTreatmentClient.Query(equipment);
         PayResponseModel result = ServiceUtil.PayClient.Query(tempPreMsg, CalculateMac(tempPreMsg));
         return(ReBuildResultModel(result));
     }
     catch (FaultException faultEx)
     {//WCF异常
         //释放信道
         ServiceUtil.PayPreTreatmentClient.Abort();
         ServiceUtil.PayClient.Abort();
         throw new ApplicationException(string.Format("WCF服务调用出错:{0}", faultEx.Message));
     }
 }
예제 #4
0
 public byte[] Pay(VisualSelfServiceEquipment equipment)
 {
     return(base.Channel.Pay(equipment));
 }
예제 #5
0
파일: PayClient.cs 프로젝트: ghbylmt/LsPay
 /// <summary>
 /// 签到
 /// </summary>
 /// <returns></returns>
 public SignResponseModel Sign(VisualSelfServiceEquipment equipment)
 {
     return(Channel.Sign(equipment));
 }
예제 #6
0
        /// <summary>
        /// 支付
        /// </summary>
        /// <returns></returns>
        public PayResponseModel Pay(string pin = "")
        {
            try
            {
                if (M100.CardContainer.Count < 1)
                {
                    throw new ApplicationException("支付失败,卡机内无卡!");
                }
                string pinBlock = "";
                if (string.IsNullOrEmpty(pin))
                {
                    pinBlock = this.IEncry.GetPinBlock();
                }
                else
                {
                    pinBlock = CalculatePinBlock(M100.CacheCard.CardNo, pin);
                }
                //string paymoney = (money * 100).ToString("f0").PadLeft(12, '0');
                switch (_creditCardPayType)
                {
                case CreditCardPayType.AllInPay:
                    //2磁道数据加密
                    M100.CardContainer[0].Msg2 = CalculateTrackBlock(M100.CacheCard.Msg2);
                    //主账号数据加密
                    M100.CardContainer[0].CardNo = CalculateTrackBlock(M100.CacheCard.CardNo);
                    break;

                case CreditCardPayType.ChinaUnionPay:
                    M100.CardContainer[0].Msg2   = M100.CacheCard.Msg2;
                    M100.CardContainer[0].CardNo = M100.CacheCard.CardNo;
                    break;

                default:
                    break;
                }
                //虚拟设备对象
                VisualSelfServiceEquipment equipment = new VisualSelfServiceEquipment()
                {
                    creditCard = M100.CardContainer[0],
                    TerminalNo = Settings.TerminalNo,
                    PinBlock   = pinBlock,
                    PayMoney   = PublicStaticData.Money
                };

                ServiceUtil.PayPreTreatmentClient.Open();
                //保存支付信息用于撤销
                this.LatestPreMsg = ServiceUtil.PayPreTreatmentClient.Pay(equipment);
                ServiceUtil.PayPreTreatmentClient.Close();

                ServiceUtil.PayClient.Open();
                PayResponseModel result = ServiceUtil.PayClient.Pay(LatestPreMsg, CalculateMac(LatestPreMsg));
                ServiceUtil.PayClient.Close();//及时关闭信道
                return(ReBuildResultModel(result));
            }
            catch (FaultException faultEx)
            {//WCF异常
                //释放信道
                ServiceUtil.PayPreTreatmentClient.Abort();
                ServiceUtil.PayClient.Abort();
                throw new ApplicationException(string.Format("WCF服务调用出错:{0}", faultEx.Message));
            }
        }