using Edge.Core.Parser.BinaryParser.Util; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ShellChina_EPS_Project_CarPlatePay_EpsClient_App.MessageEntity.Incoming { public class PaymentResponse : PaymentCommand { static PaymentResponse() { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); } private int ContentPrefixLength = 0; public override int P_3_处理码 { get { this.ParseFromContent(); return base.P_3_处理码; } } public override decimal P_4_交易金额 { get { this.ParseFromContent(); return base.P_4_交易金额; } } public override decimal P_5_实付金额 { get { this.ParseFromContent(); return base.P_5_实付金额; } } public override DateTime P_7_交易时间 { get { this.ParseFromContent(); return base.P_7_交易时间; } } public override string P_12_交易流水号 { get { this.ParseFromContent(); return base.P_12_交易流水号; } } public override string P_18_商户订单号 { get { this.ParseFromContent(); return base.P_18_商户订单号; } } /// /// “00000”表示交易成功,“00001”表示交易失败 /// public override string P_39_交易响应码 { get { this.ParseFromContent(); return base.P_39_交易响应码; } } public override string P_40_错误信息 { get { this.ParseFromContent(); return base.P_40_错误信息; } } //public override string P_41_终端编号 { get { this.ParseFromContent(); return base.P_41_终端编号; } } private void ParseFromContent() { this.P_3_处理码 = base.Content.Skip(ContentPrefixLength).Take(3).GetBCD(); var dynamicOffset = 3; if (base.BitMap.Determine(4)) { this.P_4_交易金额 = (decimal)(base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Take(6).GetBCD()) / 100; dynamicOffset += 6; } if (base.BitMap.Determine(5)) { this.P_5_实付金额 = (decimal)(base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Take(6).GetBCD()) / 100; dynamicOffset += 6; } if (base.BitMap.Determine(7)) { this.P_7_交易时间 = new DateTime( base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Take(2).GetBCD(), base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Skip(2).Take(1).GetBCD(), base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Skip(3).Take(1).GetBCD(), base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Skip(4).Take(1).GetBCD(), base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Skip(5).Take(1).GetBCD(), base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Skip(6).Take(1).GetBCD() ); //DateTime.Parse( //base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Take(7).ToArray().GetBCDString()); dynamicOffset += 7; } if (base.BitMap.Determine(12)) { this.P_12_交易流水号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(9).ToArray()); dynamicOffset += 9; } //field 18 is LLVAR if (base.BitMap.Determine(18)) { int len = base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(2).GetBCD(); dynamicOffset += 2; this.P_18_商户订单号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(len).ToArray()); dynamicOffset += len; } this.P_39_交易响应码 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(5).ToArray()); dynamicOffset += 5; //field 40 is LLLVAR if (base.BitMap.Determine(40)) { int len = base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(2).GetBCD(); dynamicOffset += 2; this.P_40_错误信息 = Encoding.GetEncoding("GB2312").GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(len).ToArray()); dynamicOffset += len; } //if (base.BitMap.Determine(41)) // this.P_41_终端编号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(12).ToArray()); } } }