コード例 #1
0
        public async Task <string> Notify(NotifyCallBackInput input)
        {
            if (input == null)
            {
                throw new HttpException("回调参数不允许为null");
            }
#if !DEBUG
            var callKey = GetNotifyCallBackKey(input);
            if (!callKey.Equals(input.Key))
            {
                throw new HttpException("密钥不正确,回调可能不是由PaysApi发起");
            }
#endif

            var userInfo = await _userManager.GetAccountBaseInfo(input.Orderuid);

            string lotteryId = string.Empty;
            var    result    = _sellAppService.PayCallBack(input, userInfo, out lotteryId);

            if (!result)
            {
                throw new HttpException("业务处理失败");
            }

            await AllotDefaultPlanNorm(userInfo.Id, lotteryId);

            return("OK");
        }
コード例 #2
0
        private string GetNotifyCallBackKey(NotifyCallBackInput input)
        {
            var paysApiInfo = _sellAppService.GetPaysApiInfo();
            var keyLine     = input.Orderid + input.Orderuid + input.Paysapi_id + input.Price + input.Realprice +
                              paysApiInfo.Token;

            return(EncryptHelper.Md5(keyLine));
        }
コード例 #3
0
 public bool PayCallBack(NotifyCallBackInput input, UserBaseDto userInfo, out string lotteryId)
 {
     try
     {
         _logger.Debug("回调参数为:" + input.ToJsonString());
         _sellCallBackService.PayCallBack(input, userInfo, out lotteryId);
         return(true);
     }
     catch (Exception e)
     {
         _logger.Error(e.Message);
         lotteryId = "";
         return(false);
     }
 }
コード例 #4
0
        public void PayCallBack(NotifyCallBackInput input, UserBaseDto userInfo, out string lotteryId)
        {
            using (var conn = GetLotteryConnection())
            {
                conn.Open();
                using (var transaction = conn.BeginTransaction())
                {
                    try
                    {
                        #region 支付处理

                        var orderDto = conn.QueryList <OrderInfoInfo>(new { SalesOrderNo = input.Orderid },
                                                                      TableNameConstants.OrderdRecordTable, transaction: transaction).First();
                        var authRank = conn
                                       .QueryList <AuthRankDto>(new { Id = orderDto.AuthRankId }, TableNameConstants.AuthRankTable, transaction: transaction)
                                       .First();

                        var authinfoLast = conn.QueryList <AuthOrderInfo>(new
                        {
                            AuthUserId = userInfo.Id,
                            LotteryId  = orderDto.LotteryId,
                            Status     = AuthStatus.Normal
                        }, TableNameConstants.AuthorizeRecordTable, transaction: transaction).OrderByDescending(p => p.CreateTime).FirstOrDefault();

                        var memberInfo = conn
                                         .QueryList <MemberInfoDto>(new
                        {
                            UserId    = userInfo.Id,
                            LotteryId = orderDto.LotteryId,
                        }, TableNameConstants.MemberTable, transaction: transaction)
                                         .FirstOrDefault();


                        orderDto.PayCost         = input.Realprice;
                        orderDto.Status          = PayStatus.Payed;
                        orderDto.Payer           = userInfo.Id;
                        orderDto.ThirdPayOrderNo = input.Paysapi_id;
                        orderDto.PayOrderNo      = OrderHelper.GenerateOrderNo(OrderType.Pay, SellType.Rmb);
                        orderDto.PayType         = PayType.PaysApi;
                        orderDto.PayTime         = DateTime.Now;

                        conn.Update(orderDto, new { orderDto.Id }, TableNameConstants.OrderdRecordTable,
                                    transaction: transaction);

                        var authinfo = new AuthOrderInfo()
                        {
                            Id          = Guid.NewGuid().ToString(),
                            AuthRankId  = orderDto.AuthRankId,
                            AuthUserId  = userInfo.Id,
                            AuthOrderNo = OrderHelper.GenerateOrderNo(OrderType.Order, SellType.Rmb),
                            //  InvalidDate = DateTime.Now.AddMonths(orderDto.Count),
                            AuthTime     = DateTime.Now,
                            AuthType     = SellType.Rmb,
                            CreateBy     = userInfo.Id,
                            CreateTime   = DateTime.Now,
                            Notes        = authRank.MemberRank.GetChineseDescribe(),
                            Status       = AuthStatus.Normal,
                            SaleRecordId = orderDto.Id,
                            LotteryId    = orderDto.LotteryId
                        };

                        if (authinfoLast == null)
                        {
                            authinfo.InvalidDate = DateTime.Now.AddMonths(orderDto.Count);
                        }
                        else
                        {
                            authinfo.InvalidDate = authinfoLast.InvalidDate.AddMonths(orderDto.Count);

                            authinfoLast.UpdateBy   = userInfo.Id;
                            authinfoLast.UpdateTime = DateTime.Now;
                            authinfoLast.Status     = AuthStatus.Invalid;
                            conn.Update(authinfoLast, new { Id = authinfoLast.Id }, TableNameConstants.AuthorizeRecordTable, transaction);
                        }
                        conn.Insert(authinfo, TableNameConstants.AuthorizeRecordTable, transaction);

                        if (memberInfo == null)
                        {
                            memberInfo = new MemberInfoDto()
                            {
                                Id              = Guid.NewGuid().ToString(),
                                InvalidDate     = authinfo.InvalidDate,
                                LastAuthOrderId = authinfo.Id,
                                LotteryId       = orderDto.LotteryId,
                                MemberRank      = (int)authRank.MemberRank,
                                Status          = MemberStatus.Normal,
                                UserId          = userInfo.Id,
                                CreateBy        = userInfo.Id,
                                CreateTime      = DateTime.Now
                            };
                            conn.Insert(memberInfo, TableNameConstants.MemberTable, transaction);
                        }
                        else
                        {
                            memberInfo.MemberRank  = (int)authRank.MemberRank;
                            memberInfo.InvalidDate = authinfo.InvalidDate;
                            memberInfo.UpdateBy    = userInfo.Id;
                            memberInfo.UpdateTime  = DateTime.Now;
                            conn.Update(memberInfo, new { Id = memberInfo.Id }, TableNameConstants.MemberTable, transaction);
                        }

                        #endregion 支付处理

                        #region 指标配置

                        //var userNormConigs = conn.QueryList<NormConfigDto>(new { UserId = userInfo.Id, IsEnable = 1 }, TableNameConstants.NormConfigTable, transaction: transaction);

                        //if (!userNormConigs.Safe().Any())
                        //{
                        //    var normConfigs = conn.QueryList<NormConfigDto>(new { LotteryId = orderDto.LotteryId, IsDefualt = 1, IsEnable = 1 }, TableNameConstants.NormConfigTable, transaction: transaction);

                        //    foreach (var normConfig in normConfigs)
                        //    {
                        //        normConfig.UserId = userInfo.Id;
                        //        normConfig.Id = Guid.NewGuid().ToString();
                        //        conn.Insert(normConfig, TableNameConstants.NormConfigTable, transaction);
                        //    }
                        //}

                        #endregion 指标配置

                        #region 清除相关缓存

                        var redisKey1 = string.Format(RedisKeyConstants.MEMBERRANK_MEMBERPOWER_KEY, orderDto.LotteryId,
                                                      authRank.MemberRank);
                        var redisKey2 = string.Format(RedisKeyConstants.MEMBERRANK_ROLE_KEY, orderDto.LotteryId,
                                                      authRank.MemberRank);
                        var redisKey3 = string.Format(RedisKeyConstants.USERINFO_KEY, userInfo.Id);
                        var redisKey4 = string.Format(RedisKeyConstants.OPERATION_MEMBERINFO_KEY, orderDto.LotteryId);
                        _cacheManager.RemoveByPattern(redisKey1);
                        _cacheManager.RemoveByPattern(redisKey2);
                        _cacheManager.RemoveByPattern(redisKey3);
                        _cacheManager.RemoveByPattern(redisKey4);
                        transaction.Commit();

                        lotteryId = orderDto.LotteryId;

                        #endregion 清除相关缓存
                    }
                    catch (Exception e)
                    {
                        transaction.Rollback();
                        throw;
                    }
                }
            }
        }