public Trade PrepareUnifiedorder(OrderContext context, out WxPayAttach attach) { var queryString = $@" INSERT INTO [dbo].[Trade]([MerchantId],[WxUserId],[TradeCode],[WxOrderId],[TradeId],[TradeType],[TradeState],[Money],[RealMoney],[CreatedDateTime],[Attach], [Strategy]) SELECT @pMchId, (SELECT TOP 1 [WxUserId] FROM [dbo].[WxUserIdentity] WHERE AppId=@pAppId AND OpenId=@pOpenId ) AS WxUserId, (SELECT COUNT(Id) + 1 FROM [dbo].[Trade] WHERE CreatedDateTime / 86400 * 86400 = CONVERT(BIGINT,DATEDIFF(S,'1970-01-01',SYSDATETIME())) / 86400 * 86400) AS [Code], @pWxOrderId AS WxOrderId, @pTradeId AS TradeId, {(int)TradeTypes.Consume} AS TradeType, {(int)TradeStates.Newly} AS TradeState, @pMoney AS Money, @pRealMoney AS RealMoney, DATEDIFF(S,'1970-01-01',SYSUTCDATETIME()) AS CreatedDateTime, @pAttach AS Attach, @pStrategy AS Strategy; UPDATE [dbo].[Trade] SET TradeId=CONCAT(@prefix , [dbo].[funLpad](Id,10,'0')) WHERE WxOrderId = @pWxOrderId; SELECT TOP 1 * FROM [dbo].[Trade] WHERE WxOrderId = @pWxOrderId ; "; //var pyramid = this.wxUserService.GetSharedContext(context as IWxUserKey) // .BuildSharedPyramid(context as IWxUserKey, out long basicWxUserId); attach = new WxPayAttach() { //CardId = context.CardId, NonceStr = this.generator.Genernate(), TimeStamp = DateTime.UtcNow.ToUnixStampDateTime(), //UserCode = context.UserCode, //MCode = context.MCode }; //context.Money = context.Totalfee.ToString(); attach.Sign(context.Money); using (var database = this.databaseFactory.GenerateDatabase(isWriteOnly: true)) { return(database.SqlQuerySingleOrDefaultTransaction <Trade>(queryString, new { @pAppId = context.AppId, @pOpenId = context.OpenId, @pMchId = context.MerchantId, @pWxOrderId = Guid.NewGuid().ToString().Replace("-", string.Empty), @pTradeId = Guid.NewGuid().ToString().Replace("-", string.Empty), @pMoney = context.Money, @pRealMoney = context.Money, @pStrategy = "{}", @pAttach = context.SerializeToJson(), @prefix = string.Format("T{0}", DateTime.UtcNow.ToString("yyyyMMdd")) })); } }
public static void Sign(this WxPayAttach attach, int money) { var array = new string[] { attach.NonceStr, attach.TimeStamp.ToString(), attach.UserCode ?? "", attach.CardId ?? "", money.ToString() }; attach.Paysign = array.Sign(); }