public virtual async Task <object> PayNotifyUrl(string appName, [FromBody] TenPayNotifyXml input) { Log.Warning(JsonConvert.SerializeObject(input)); var return_msg = input.return_msg; var return_code = input.return_code; var app = await _appProvider.GetOrNullAsync(appName); var appsec = app["appsec"] ?? throw new AbpException($"App:{appName} appsec未设置"); var verifySign = _signatureGenerator.Generate(GetPayParameters(input), MD5.Create(), appsec); Log.Warning($"verifySign:{verifySign},InputSign:{input.sign}"); var tenPayNotify = new TenPayNotify { appid = input.appid, bank_type = input.bank_type, cash_fee = input.cash_fee, fee_type = input.fee_type, is_subscribe = input.is_subscribe, mch_id = input.mch_id, nonce_str = input.nonce_str, openid = input.openid, out_trade_no = input.out_trade_no, result_code = input.result_code, return_code = input.return_code, sign = input.sign, time_end = input.time_end, total_fee = input.total_fee, trade_type = input.trade_type, transaction_id = input.transaction_id }; var notify = await _tenpayRepository.FirstOrDefaultAsync(z => z.out_trade_no == tenPayNotify.out_trade_no); if (notify == null) { notify = tenPayNotify; var insertEntity = await _tenpayRepository.InsertAsync(notify, autoSave : true); await _capBus.PublishAsync("mall.tenpay.notify", insertEntity); } var xml = $@"<xml> <return_code><![CDATA[{return_code}]]></return_code> <return_msg><![CDATA[{return_msg}]]></return_msg> </xml>"; return(xml); }
public virtual async Task <object> PayNotifyUrl([FromBody] TenPayNotifyXml input) { Log.Warning(JsonConvert.SerializeObject(input)); var return_msg = input.return_msg; var return_code = input.return_code; var tenPayNotify = new TenPayNotify { appid = input.appid, bank_type = input.bank_type, cash_fee = input.cash_fee, fee_type = input.fee_type, is_subscribe = input.is_subscribe, mch_id = input.mch_id, nonce_str = input.nonce_str, openid = input.openid, out_trade_no = input.out_trade_no, result_code = input.result_code, return_code = input.return_code, sign = input.sign, time_end = input.time_end, total_fee = input.total_fee, trade_type = input.trade_type, transaction_id = input.transaction_id }; var notify = await _tenpayRepository.FirstOrDefaultAsync(z => z.out_trade_no == tenPayNotify.out_trade_no); if (notify == null) { notify = tenPayNotify; var insertEntity = await _tenpayRepository.InsertAsync(notify, autoSave : true); await _capBus.PublishAsync("mall.tenpay.notify", insertEntity); } var xml = $@"<xml> <return_code><![CDATA[{return_code}]]></return_code> <return_msg><![CDATA[{return_msg}]]></return_msg> </xml>"; return(xml); }
public async Task TenPayNotifySubscriber(TenPayNotify tenPayNotify) { using (var uow = _unitOfWorkManager.Begin(requiresNew: true)) { var payOrder = await _payOrderRepository.FindAsync(tenPayNotify.out_trade_no); if (payOrder != null) { if (payOrder.TotalPrice.ToString() == tenPayNotify.total_fee && tenPayNotify.result_code == "SUCCESS") { payOrder.SuccessPay(tenPayNotify.Id); if (payOrder.Type == MallEnums.OrderType.Product) { var productOrders = await _productOrderRepository.Where(x => x.BillNo == payOrder.BillNo).ToListAsync(); foreach (var o in productOrders) { // TODO:实收少于应收多少范围内要发消息 o.SuccessPay(MallEnums.PayType.微信, payOrder.TotalPrice / 100m); } } await uow.SaveChangesAsync(); } else { throw new Exception($"Tenpay Result Fee not equals !!pay is {tenPayNotify.fee_type} , db is {payOrder.TotalPrice} , BillNo is {payOrder.BillNo}"); } } else { //TODO:这里要更多的消息通知管理员 throw new Exception($"cant't find BillNo {tenPayNotify.out_trade_no}"); } await Task.CompletedTask; } }