public void WePayNotify() { WePayReturnModel payResult = new WePayReturnModel(); HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"]; //获取传统context HttpRequestBase request = context.Request; //定义传统request对象 var result = this._wePay.VerifyNotify(request, out payResult); }
public bool VerifyNotify(HttpRequestBase request, out WePayReturnModel model) { bool verifyResult = false; model = new WePayReturnModel(); string requestXml = GetRequestXmlData(request); var dic = FromXml(requestXml); model.RequestForm = requestXml; string returnCode = GetValueFromDic <string>(dic, "return_code"); if (!string.IsNullOrEmpty(returnCode) && returnCode == "SUCCESS")//通讯成功 { bool result = WePayNotifyValidation(dic); if (result) { string transactionid = GetValueFromDic <string>(dic, "transaction_id"); if (!string.IsNullOrEmpty(transactionid)) { string queryXml = BuildQueryRequest(transactionid, dic); string queryResult = HTTPHelper.Post(WepayConfig.WEPAY_ORDERQUERY_URL, queryXml); var queryReturnDic = FromXml(queryResult); if (ValidatonQueryResult(queryReturnDic))//查询成功 { verifyResult = true; model.OutTradeNo = GetValueFromDic <string>(dic, "out_trade_no"); model.TotalFee = GetValueFromDic <decimal>(dic, "total_fee") / 100; model.TradeNo = transactionid; model.TradeStatus = GetValueFromDic <string>(dic, "result_code"); model.ReturnXml = BuildReturnXml("SUCCESS", "成功"); } else { model.ReturnXml = BuildReturnXml("FAIL", "订单查询失败"); } } else { model.ReturnXml = BuildReturnXml("FAIL", "支付结果中微信订单号不存在"); } } else { model.ReturnXml = BuildReturnXml("FAIL", "签名失败"); } } else { string returnmsg; dic.TryGetValue("return_msg", out returnmsg); throw new Exception("异步通知错误:" + returnmsg); } return(verifyResult); }
public ActionResult WepayWebNotify() { //var _logger = ObjectContainer.Resolve<ILoggerFactory>().Create(GetType().FullName); WePayReturnModel payResult = new WePayReturnModel(); WePay _wePay = new WePay(); var result = _wePay.VerifyNotify(Request, out payResult); // _logger.Info("resultXml:" + payResult.RequestForm); if (result) { List <DbParameter> parameter = new List <DbParameter>(); parameter.Add(DbFactory.CreateDbParameter("@OrderNumber", payResult.OutTradeNo)); parameter.Add(DbFactory.CreateDbParameter("@STATUS", "0")); var order = database.FindEntityByWhere <Am_Charge>(" and OrderNumber=@OrderNumber and STATUS=@STATUS ", parameter.ToArray()); if (order != null && order.Number != null) { if (payResult.TotalFee == Decimal.Parse(order.Money.ToString())) { //var orderCommand = new Commands.TradeCenter.UpdateOrderStatusCommand(order.OrderId, 1); //var status = await _commandService.SendAsync(orderCommand); //if (status.Status == ECommon.IO.AsyncTaskStatus.Success) //{ // return Content(payResult.ReturnXml); //} if (order.ChargeType == 1) //余额充值 { List <DbParameter> par = new List <DbParameter>(); par.Add(DbFactory.CreateDbParameter("@Number", order.U_Number)); var accout = database.FindEntityByWhere <Ho_PartnerUser>(" and Number=@Number", par.ToArray()); if (accout != null && accout.Number != null) { order.OutNumber = payResult.TradeNo; order.STATUS = 1; order.StatusStr = "充值成功"; order.SucTime = DateTime.Now; database.Update <Am_Charge>(order); accout.Money = accout.Money + order.Money; var status = database.Update <Ho_PartnerUser>(accout); if (status > 0) { var moneyDetail = new Am_MoneyDetail { Number = CommonHelper.GetGuid, CreateTime = DateTime.Now, CreateUserId = order.U_Number, CreateUserName = order.UserName, CurrMoney = accout.Money, Money = order.Money, OperateType = 1, OperateTypeStr = "微信充值", Remark = "", UserName = order.UserName, U_Number = order.U_Number }; database.Insert <Am_MoneyDetail>(moneyDetail); return(Content(payResult.ReturnXml)); } } } else if (order.ChargeType == 2) //电费缴费 { order.OutNumber = payResult.TradeNo; order.STATUS = 1; order.StatusStr = "充值成功"; order.SucTime = DateTime.Now; database.Update <Am_Charge>(order); List <DbParameter> par = new List <DbParameter>(); par.Add(DbFactory.CreateDbParameter("@Number", order.AmmeterNumber)); var ammeter = database.FindEntityByWhere <Am_Ammeter>(" and Number=@Number", par.ToArray()); var item = CommonClass.AmmeterApi.AmmeterRecharge(ammeter.Collector_Code, ammeter.AM_Code, ammeter.Acount_Id.Value, ammeter.Count.Value, int.Parse(order.Money.ToString())); if (item.suc) { var task = new Am_Task { AmmeterCode = ammeter.AM_Code, AmmeterNumber = ammeter.Number, Number = item.opr_id, CollectorCode = ammeter.Collector_Code, CollectorNumber = ammeter.Collector_Number, CreateTime = DateTime.Now, OperateType = 4, OperateTypeStr = "微信充值", OrderNumber = order.OrderNumber, OverTime = DateTime.Now, Remark = "", Status = 0, StatusStr = "队列中", TaskMark = "", UserName = order.UserName, U_Name = order.U_Name, U_Number = order.U_Number, Money = order.Money }; database.Insert <Am_Task>(task); } return(Content(payResult.ReturnXml)); } else if (order.ChargeType == 3) //账单支付 { order.OutNumber = payResult.TradeNo; order.STATUS = 1; order.StatusStr = "缴费成功"; order.SucTime = DateTime.Now; database.Update <Am_Charge>(order); List <DbParameter> par = new List <DbParameter>(); par.Add(DbFactory.CreateDbParameter("@Number", order.ObjectNumber)); par.Add(DbFactory.CreateDbParameter("@Status", "1")); var bill = database.FindEntityByWhere <Am_Bill>(" and Number=@Number and Status=@Status ", par.ToArray()); if (bill != null && bill.Number != null) { bill.Status = 2; bill.StatusStr = "已支付"; bill.PayTime = DateTime.Now; List <DbParameter> parBill = new List <DbParameter>(); parBill.Add(DbFactory.CreateDbParameter("@Number", bill.Number)); parBill.Add(DbFactory.CreateDbParameter("@Status", bill.Status)); parBill.Add(DbFactory.CreateDbParameter("@StatusStr", bill.StatusStr)); parBill.Add(DbFactory.CreateDbParameter("@PayTime", bill.PayTime)); StringBuilder sql = new StringBuilder("update Am_Bill set Status=@Status,PayTime=@PayTime,StatusStr=@StatusStr where Number=@Number and Status = 1"); if (database.ExecuteBySql(sql, parBill.ToArray()) > 0) { //押金 UserDeposit(bill); var ammodel = database.FindEntity <Am_Ammeter>(bill.AmmeterNumber); //给余额加钱 var userModel = database.FindEntity <Ho_PartnerUser>(ammodel.UY_Number); userModel.Money += bill.Money; userModel.Modify(userModel.Number); database.Update(userModel); //记录余额日志 var modeldetail = new Am_MoneyDetail() { CreateTime = DateTime.Now, CreateUserId = userModel.Number, CreateUserName = userModel.Account, CurrMoney = userModel.Money + bill.Money, //变动后余额 Money = bill.Money, OperateType = 4, OperateTypeStr = "账单缴费", UserName = userModel.Account, U_Name = userModel.Name, U_Number = userModel.Number, Number = CommonHelper.GetGuid, Remark = "" }; database.Insert(modeldetail); //记录日志 //分账 var config = database.FindList <Fx_WebConfig>().FirstOrDefault(); double fmoney = 0; double money = 0;//1:1押金返还金额 fmoney = bill.Money.Value * (1 - config.ChargeFee.Value); PayToPerson pay = new BusinessCard.Web.Code.PayToPerson(); try { var user = database.FindEntity <Ho_PartnerUser>(ammodel.UY_Number); if (user.FreezeMoney > 0) //首先要有押金 { money = bill.Money.Value * config.ChargeFee.Value; //如果返还的金额大于 if (money > user.FreezeMoney) { money = user.FreezeMoney.Value; } fmoney += money; } PayToPersonModel m = pay.EnterprisePay(bill.Number.Replace("-", ""), userModel.OpenId, decimal.Parse(fmoney.ToString("0.00")), userModel.Name, bill.T_U_Name + ",账单支付"); if (m.result_code == "SUCCESS")//分成功 { userModel.Money -= bill.Money; userModel.FreezeMoney -= money; userModel.Modify(userModel.Number); database.Update(userModel); //扣掉余额 //添加押金返还记录 var recordModel = new Am_AmDepositDetail() { CreateTime = DateTime.Now, CurrMoney = user.FreezeMoney, Mark = "押金1:1返还", Money = money, UserName = userModel.Account, U_Name = userModel.Name, U_Number = userModel.Number }; recordModel.Create(); database.Insert(recordModel); //添加返还记录 //记录余额日志 var modeldetail1 = new Am_MoneyDetail() { CreateTime = DateTime.Now, CreateUserId = userModel.Number, CreateUserName = userModel.Account, CurrMoney = userModel.Money - bill.Money, //变动后余额 Money = -bill.Money, OperateType = 6, OperateTypeStr = "分账", UserName = userModel.Account, U_Name = userModel.Name, U_Number = userModel.Number, Number = CommonHelper.GetGuid, Remark = "" }; database.Insert(modeldetail1); //记录日志 //记录分账信息 var payToUser = new Am_PayToUserMoneyDetails() { CreateTime = DateTime.Now, F_UName = userModel.Name, Number = CommonHelper.GetGuid, F_UserName = userModel.Account, F_UserNumber = userModel.Number, Money = fmoney, MoneyFree = money, ObjectNumber = bill.Number, OpenId = userModel.OpenId, OperateType = 1, OperateTypeStr = "账单缴费", Remark = "", TaskNumber = "", TotalMoney = bill.Money, UName = bill.T_U_Name, UserName = bill.T_UserName, UserNumber = bill.T_U_Number }; database.Insert <Am_PayToUserMoneyDetails>(payToUser); } else { } } catch (Exception ex) { } } return(Content(payResult.ReturnXml)); } //发送微信通知 } } } } return(Content(BuildWepayReturnXml("FAIL", ""))); }