PaymentResponse.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using Edge.Core.Parser.BinaryParser.Util;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. namespace ShellChina_EPS_Project_CarPlatePay_EpsClient_App.MessageEntity.Incoming
  7. {
  8. public class PaymentResponse : PaymentCommand
  9. {
  10. static PaymentResponse()
  11. {
  12. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  13. }
  14. private int ContentPrefixLength = 0;
  15. public override int P_3_处理码 { get { this.ParseFromContent(); return base.P_3_处理码; } }
  16. public override decimal P_4_交易金额 { get { this.ParseFromContent(); return base.P_4_交易金额; } }
  17. public override decimal P_5_实付金额 { get { this.ParseFromContent(); return base.P_5_实付金额; } }
  18. public override DateTime P_7_交易时间 { get { this.ParseFromContent(); return base.P_7_交易时间; } }
  19. public override string P_12_交易流水号 { get { this.ParseFromContent(); return base.P_12_交易流水号; } }
  20. public override string P_18_商户订单号 { get { this.ParseFromContent(); return base.P_18_商户订单号; } }
  21. /// <summary>
  22. /// “00000”表示交易成功,“00001”表示交易失败
  23. /// </summary>
  24. public override string P_39_交易响应码 { get { this.ParseFromContent(); return base.P_39_交易响应码; } }
  25. public override string P_40_错误信息 { get { this.ParseFromContent(); return base.P_40_错误信息; } }
  26. //public override string P_41_终端编号 { get { this.ParseFromContent(); return base.P_41_终端编号; } }
  27. private void ParseFromContent()
  28. {
  29. this.P_3_处理码 = base.Content.Skip(ContentPrefixLength).Take(3).GetBCD();
  30. var dynamicOffset = 3;
  31. if (base.BitMap.Determine(4))
  32. {
  33. this.P_4_交易金额 = (decimal)(base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Take(6).GetBCD()) / 100;
  34. dynamicOffset += 6;
  35. }
  36. if (base.BitMap.Determine(5))
  37. {
  38. this.P_5_实付金额 = (decimal)(base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Take(6).GetBCD()) / 100;
  39. dynamicOffset += 6;
  40. }
  41. if (base.BitMap.Determine(7))
  42. {
  43. this.P_7_交易时间 =
  44. new DateTime(
  45. base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Take(2).GetBCD(),
  46. base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Skip(2).Take(1).GetBCD(),
  47. base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Skip(3).Take(1).GetBCD(),
  48. base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Skip(4).Take(1).GetBCD(),
  49. base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Skip(5).Take(1).GetBCD(),
  50. base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Skip(6).Take(1).GetBCD()
  51. );
  52. //DateTime.Parse(
  53. //base.Content.Skip(ContentPrefixLength).Skip(dynamicOffset).Take(7).ToArray().GetBCDString());
  54. dynamicOffset += 7;
  55. }
  56. if (base.BitMap.Determine(12))
  57. {
  58. this.P_12_交易流水号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(9).ToArray());
  59. dynamicOffset += 9;
  60. }
  61. //field 18 is LLVAR
  62. if (base.BitMap.Determine(18))
  63. {
  64. int len = base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(2).GetBCD();
  65. dynamicOffset += 2;
  66. this.P_18_商户订单号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(len).ToArray());
  67. dynamicOffset += len;
  68. }
  69. this.P_39_交易响应码 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(5).ToArray());
  70. dynamicOffset += 5;
  71. //field 40 is LLLVAR
  72. if (base.BitMap.Determine(40))
  73. {
  74. int len = base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(2).GetBCD();
  75. dynamicOffset += 2;
  76. this.P_40_错误信息 = Encoding.GetEncoding("GB2312").GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(len).ToArray());
  77. dynamicOffset += len;
  78. }
  79. //if (base.BitMap.Determine(41))
  80. // this.P_41_终端编号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(12).ToArray());
  81. }
  82. }
  83. }