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