MembershipInquiryResponse.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Edge.Core.Parser.BinaryParser.Util;
  2. using ShellChina_EPS_Project_CarPlatePay_EpsClient_App.MessageEntity.Base;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. namespace ShellChina_EPS_Project_CarPlatePay_EpsClient_App.MessageEntity.Incoming
  8. {
  9. public class MembershipInquiryResponse : MembershipInquiryCommand
  10. {
  11. /// <summary>
  12. /// 消息长度 b2
  13. /// 消息类型 n4
  14. /// 主位图 b8
  15. /// </summary>
  16. private int ContentPrefixLength = 0;
  17. public MembershipInquiryResponse()
  18. {
  19. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  20. }
  21. public override int P_3_处理码 { get { this.ParseFromContent(); return base.P_3_处理码; } }
  22. public override string P_12_交易流水号 { get { this.ParseFromContent(); return base.P_12_交易流水号; } }
  23. public override string P_24_会员ID { get { this.ParseFromContent(); return base.P_24_会员ID; } }
  24. public override string P_34_车牌号码 { get { this.ParseFromContent(); return base.P_34_车牌号码; } }
  25. /// <summary>
  26. /// “00000”表示交易成功,“00001”表示交易失败
  27. /// </summary>
  28. public override string P_39_交易响应码 { get { this.ParseFromContent(); return base.P_39_交易响应码; } }
  29. public override string P_40_错误信息 { get { this.ParseFromContent(); return base.P_40_错误信息; } }
  30. public override string P_41_终端编号 { get { this.ParseFromContent(); return base.P_41_终端编号; } }
  31. private void ParseFromContent()
  32. {
  33. this.P_3_处理码 = base.Content.Skip(ContentPrefixLength).Take(3).GetBCD();
  34. var dynamicOffset = 3;
  35. if (base.BitMap.Determine(12))
  36. {
  37. this.P_12_交易流水号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(9).ToArray());
  38. dynamicOffset += 9;
  39. }
  40. if (base.BitMap.Determine(24))
  41. {
  42. this.P_24_会员ID = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(20).ToArray());
  43. dynamicOffset += 20;
  44. }
  45. //field 34 is LLLVAR
  46. if (base.BitMap.Determine(34))
  47. {
  48. int len = base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(2).GetBCD();
  49. dynamicOffset += 2;
  50. this.P_34_车牌号码 = Encoding.GetEncoding("GBK").GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(len).ToArray());
  51. dynamicOffset += len;
  52. }
  53. this.P_39_交易响应码 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(5).ToArray());
  54. dynamicOffset += 5;
  55. //field 40 is LLLVAR
  56. if (base.BitMap.Determine(40))
  57. {
  58. int len = base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(2).GetBCD();
  59. dynamicOffset += 2;
  60. this.P_40_错误信息 = Encoding.GetEncoding("GBK").GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(len).ToArray());
  61. dynamicOffset += len;
  62. }
  63. if (base.BitMap.Determine(41))
  64. this.P_41_终端编号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(12).ToArray());
  65. }
  66. }
  67. }