Esempio n. 1
0
        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"))
                }));
            }
        }
Esempio n. 2
0
        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();
        }