public async Task <Result> PreTest([FromBody] PreTestPatams testPatams) { try { var sw = Stopwatch.StartNew(); var appinfo = _appService.GetAppCache(testPatams.AppKey); if (appinfo == null) { return new Result { Status = false, Message = TaskResultStatus.AppKeyError.ToString() } } ; var json = AESAlgorithm.Decrypt(testPatams.PreData, appinfo.AppSecret); //var p= _serializer.Deserialize<PreTestModel>(json); // var dto = p.MapTo<PreTestDto>(); var dto = new PreTestDto(); var pArr = json.Split("&", StringSplitOptions.RemoveEmptyEntries); dto.AppKey = pArr[0]; dto.AppSecret = pArr[1]; dto.MerchantNo = pArr[2]; var rlt = await _preTestService.PreTest(dto); sw.Stop(); Logger.Info($"pretest time:{sw.ElapsedMilliseconds}"); return(rlt); } catch (Exception ex) { Logger.Error("预验失败", ex); return(new Result { Status = false }); } }
public async Task <Result> PreTest(PreTestDto dto) { try { var appInfo = _appService.GetAppCache(dto.AppKey); if (appInfo == null) { return new Result { Status = false, Message = TaskResultStatus.AppKeyError.ToString() } } ; if (!VerifTimeStamp(dto.TimeStamp)) { return(await Task.FromResult(new Result { Status = false, Message = TaskResultStatus.TimeStampError.ToString() })); } var md5 = Hx.Security.Md5Getter.Get($"{appInfo.Id}{appInfo.AppSecret}{dto.TimeStamp}{appInfo.UserId}"); if (!dto.Signature.ToLower().Equals(md5.ToLower())) { return new Result { Status = false, Message = TaskResultStatus.PreSignatureError.ToString() } } ; //验证余额 var ver = await VerifiedBalance(appInfo); if (!ver.Status) { return(ver); } var dataContent = AESAlgorithm.Decrypt(dto.DataContent, appInfo.AppSecret); if (string.IsNullOrWhiteSpace(dataContent)) { return new Result { Status = false, Message = TaskResultStatus.TokenError.ToString() } } ; //计费 await Balance(appInfo); //redis await _redisHelper.StringIncrementAsync(RedisKeyName.CreateUserAmountKey(appInfo.UserId), -1); //计费明细写数据库 await BillingDetails(appInfo, dataContent); return(new Result { Status = true, Message = TaskResultStatus.OK.ToString() }); } catch (Exception ex) { Logger.Error($"PreTest error:{ex},dto:{Serializer.Serialize(dto)}"); return(new Result { Status = false, Message = TaskResultStatus.SystemError.ToString() }); } }