using Edge.Core.Parser.BinaryParser.Util; using ShellChina_EPS_Project_CarPlatePay_EpsClient_App.MessageEntity.Base; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ShellChina_EPS_Project_CarPlatePay_EpsClient_App.MessageEntity.Incoming { public class MembershipInquiryResponse : MembershipInquiryCommand { /// /// 消息长度 b2 /// 消息类型 n4 /// 主位图 b8 /// private int ContentPrefixLength = 0; public MembershipInquiryResponse() { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); } public override int P_3_处理码 { get { this.ParseFromContent(); return base.P_3_处理码; } } public override string P_12_交易流水号 { get { this.ParseFromContent(); return base.P_12_交易流水号; } } public override string P_24_会员ID { get { this.ParseFromContent(); return base.P_24_会员ID; } } public override string P_34_车牌号码 { get { this.ParseFromContent(); return base.P_34_车牌号码; } } /// /// “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(12)) { this.P_12_交易流水号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(9).ToArray()); dynamicOffset += 9; } if (base.BitMap.Determine(24)) { this.P_24_会员ID = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(20).ToArray()); dynamicOffset += 20; } //field 34 is LLLVAR if (base.BitMap.Determine(34)) { int len = base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(2).GetBCD(); dynamicOffset += 2; this.P_34_车牌号码 = Encoding.GetEncoding("GBK").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("GBK").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()); } } }