using System; namespace MySystem.Entity.UnionPay { /// /// 银联请求报文 /// public class UnionPayRequest { private static int _sequenceNumber = 0; /// /// 服务商编号,由乐刷分配的接入方唯一标识,明文传输 /// public string agentId { get; set; } /// /// 当前代理商编号(操作来源) /// public string currentAgentId { get; set; } /// /// 版本号,目前固定值1.0 /// public string version { get; set; } = "1.0"; /// /// 请求流水号(yyyyMMddHHmmssSSSXXXXX,其中 XXXXX为5位顺序号,禁止使用UUID等无意义数据) /// public string reqSerialNo { get; set; } = GenerateReqSerialNo(); /// /// 签名串 /// public string sign { get; set; } /// /// 验签方式,默认true-国密验签,false-MD5验签 /// public bool algorithm { get; set; } = true; /// /// 业务数据 /// public T data { get; set; } /// /// 生成请求流水号 /// /// 格式化的请求流水号 private static string GenerateReqSerialNo() { // 生成当前时间戳部分:yyyyMMddHHmmssSSS string timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff"); // 生成5位顺序号,循环递增 int sequence = System.Threading.Interlocked.Increment(ref _sequenceNumber); if (sequence > 99999) { System.Threading.Interlocked.Exchange(ref _sequenceNumber, 1); sequence = 1; } // 组合完整的请求流水号 return $"{timestamp}{sequence.ToString("D5")}"; } } /// /// 银联请求报文(非泛型版本,兼容旧代码) /// public class UnionPayRequest : UnionPayRequest { } }