/// <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 override void DecodeBody(byte[] bytes) { MemoryStream ms = new MemoryStream(bytes); using (ms){ SignResponseModel entity = Serializer.Deserialize <SignResponseModel>(ms); this.Result = entity.Result; } }
public override byte[] EncodeBody() { SignResponseModel entity = new SignResponseModel(); entity.Result = this.Result; MemoryStream ms = new MemoryStream(); using (ms){ Serializer.Serialize(ms, entity); return(ms.ToArray()); } }
/// <summary> /// 签到 /// </summary> /// <returns></returns> public bool Sign() { ServiceUtil.PayClient.Open(); SignResponseModel responseModel = ServiceUtil.PayClient.Sign(new VisualSelfServiceEquipment { TerminalNo = Settings.TerminalNo }); ServiceUtil.PayClient.Close(); if (responseModel.ResponseCode != "00") { return(false); } string key = responseModel.Content; StringBuilder sbWorkKey = new StringBuilder(); bool result = false; switch (_creditCardPayType) { case CreditCardPayType.AllInPay: #region 通联验证逻辑 sbWorkKey.Append(key.Substring(6, 32)); StringBuilder sbMak = new StringBuilder(); sbMak.Append(key.Substring(46, 16)); StringBuilder sbTrk = new StringBuilder(); sbTrk.Append(key.Substring(86, 32)); IEncry.LoadWorkKeySign(sbWorkKey, sbMak, sbTrk); result = IEncry.CheckPIN(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(38, 8) && IEncry.CheckMAK(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(78, 8) && IEncry.CheckTRK(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(118, 8); #endregion break; case CreditCardPayType.ChinaUnionPay: #region 银联加密 sbWorkKey.Append(key.Substring(4, 32)); sbMak = new StringBuilder(); sbMak.Append(key.Substring(44, 16)); IEncry.LoadWorkKeySign(sbWorkKey, sbMak); result = IEncry.CheckPIN(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(36, 8) && IEncry.CheckMAK(new StringBuilder("0000000000000000")).Substring(0, 8) == key.Substring(76, 8); #endregion break; default: break; } return(result); }