| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using System;
- namespace MySystem.Entity.UnionPay
- {
- /// <summary>
- /// 银联请求报文
- /// </summary>
- public class UnionPayRequest<T>
- {
- private static int _sequenceNumber = 0;
- /// <summary>
- /// 服务商编号,由乐刷分配的接入方唯一标识,明文传输
- /// </summary>
- public string agentId { get; set; }
- /// <summary>
- /// 当前代理商编号(操作来源)
- /// </summary>
- public string currentAgentId { get; set; }
- /// <summary>
- /// 版本号,目前固定值1.0
- /// </summary>
- public string version { get; set; } = "1.0";
- /// <summary>
- /// 请求流水号(yyyyMMddHHmmssSSSXXXXX,其中 XXXXX为5位顺序号,禁止使用UUID等无意义数据)
- /// </summary>
- public string reqSerialNo { get; set; } = GenerateReqSerialNo();
- /// <summary>
- /// 签名串
- /// </summary>
- public string sign { get; set; }
- /// <summary>
- /// 验签方式,默认true-国密验签,false-MD5验签
- /// </summary>
- public bool algorithm { get; set; } = true;
- /// <summary>
- /// 业务数据
- /// </summary>
- public T data { get; set; }
- /// <summary>
- /// 生成请求流水号
- /// </summary>
- /// <returns>格式化的请求流水号</returns>
- 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")}";
- }
- }
- /// <summary>
- /// 银联请求报文(非泛型版本,兼容旧代码)
- /// </summary>
- public class UnionPayRequest : UnionPayRequest<object>
- {
- }
- }
|