/// <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); }
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)); }
/// <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)); } }
public byte[] Pay(VisualSelfServiceEquipment equipment) { return(base.Channel.Pay(equipment)); }
/// <summary> /// 签到 /// </summary> /// <returns></returns> public SignResponseModel Sign(VisualSelfServiceEquipment equipment) { return(Channel.Sign(equipment)); }
/// <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)); } }