public override void ProcessNotify() { WxPayData notifyData = GetNotifyData(); //检查支付结果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml()); page.Response.Write(res.ToXml()); page.Response.End(); } string transaction_id = notifyData.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id)) { //若订单查询失败,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "订单查询失败 : " + res.ToXml()); page.Response.Write(res.ToXml()); page.Response.End(); } //查询订单成功 else { WxPayData res = new WxPayData(); try { Log.Debug(this.GetType().ToString(), "订单状态 : " + notifyData.GetValue("result_code").ToString()); if (notifyData.GetValue("result_code").ToString() == "SUCCESS") { string orderNo = notifyData.GetValue("out_trade_no").ToString(); Log.Debug(this.GetType().ToString(), "订单号 : " + orderNo); if (!string.IsNullOrWhiteSpace(orderNo)) { using (_databaseInstance = new DatabaseInstance(_database)) { _databaseInstance.BeginTransaction(); var sql = "select * from fz_Orders where orderNo=@orderNo"; var order = new QueryObject <Orders>(_databaseInstance, sql, new { orderNo = orderNo }).FirstOrDefault(); if (order != null && order.orderState == OrderStates.awaitPay) { order.orderState = OrderStates.paid; order.payTime = DateTime.Now; _databaseInstance.Update(order, "fz_Orders"); var list = orderDetialService.GetOrderNo(orderNo); if (list != null) { if (order.type == OrderTypes.ticket) { foreach (var item in list) { var admissionTicket = admissionTicketService.GetById(item.sourceId); for (var i = 0; i < item.num; i++) { var ticket = new Tickets(); ticket.AdmissionTicketId = admissionTicket.id; ticket.orderNo = orderNo; ticket.Price = item.amount; ticket.State = TicketsState.NotUse; ticket.UserId = order.userId; ticket.useScope = order.useScope; ticket.adultNum = admissionTicket.adultNum; ticket.BuyTime = DateTime.Now; ticket.childNum = admissionTicket.childNum; ticket.Code = string.Format("{0:yyyyMMddHHmmssffff}", DateTime.Now) + i.ToString() + order.userId.ToString(); ticket.ExpiredDate = DateTime.Now.Date; _databaseInstance.Insert(ticket, "Tickets"); } } } else if (order.type == OrderTypes.card) { string sqlSite = "select * from Sites"; var site = new QueryObject <Site>(_databaseInstance, sqlSite, null).FirstOrDefault(); string cardNo = ""; int minxCode = 1; Int32.TryParse(site.MixCode, out minxCode); int i = 1; while (true) { minxCode = minxCode + i; cardNo = string.Format("60000000{0}", minxCode.ToString().PadLeft(8, '0')); string sqlCard = "select * from Accounts where Name=@Name"; var card = new QueryObject <Account>(_databaseInstance, sqlCard, new { Name = cardNo }).FirstOrDefault(); if (card == null) { break; } i++; } int shopId = 0; if (!string.IsNullOrWhiteSpace(order.useScope)) { string sqlShop = "select * from shops where Name=@Name"; var shop = new QueryObject <Account>(_databaseInstance, sqlShop, new { Name = order.useScope }).FirstOrDefault(); if (shop != null) { shopId = shop.ShopId; } } var item = list.FirstOrDefault(); var accountType = _databaseInstance.GetById <AccountType>("AccountTypes", item.sourceId); var account = new Account(); account.AccountLevel = 0; account.AccountToken = "11111111"; account.AccountTypeId = accountType.AccountTypeId; account.Amount = 0; account.ExpiredDate = DateTime.Now.AddMonths(accountType.ExpiredMonths); account.Frequency = accountType.Frequency; account.FrequencyUsed = 0; account.LastDealTime = DateTime.Now; account.Name = cardNo; account.OpenTime = DateTime.Now; account.OwnerId = order.userId; account.ShopId = shopId; account.useScope = order.useScope; account.SaleAmount = order.payAmount; account.TotalTimes = accountType.Frequency; if (order.payAmount > 0 && accountType.Frequency > 0) { account.SinglePrice = Convert.ToInt32(order.payAmount / accountType.Frequency); } else { account.SinglePrice = 0; } account.State = AccountStates.Normal; _databaseInstance.Insert(account, "Accounts"); site.MixCode = minxCode.ToString(); _databaseInstance.Update(site, "Sites"); } } } _databaseInstance.Commit(); } } } res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml()); page.Response.Write(res.ToXml()); page.Response.End(); } catch (Exception ex) { if (!(ex is System.Threading.ThreadAbortException)) { res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单状态修改失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml() + ex); page.Response.Write(res.ToXml()); page.Response.End(); } } finally { if (_databaseInstance != null) { _databaseInstance.Dispose(); } } } }
public void hd(string orderNo) { _databaseInstance.BeginTransaction(); var sql = "select * from fz_Orders where orderNo=@orderNo"; var order = new QueryObject <Orders>(_databaseInstance, sql, new { orderNo = orderNo }).FirstOrDefault(); if (order != null && order.orderState == OrderStates.awaitPay) { order.orderState = OrderStates.paid; order.payTime = DateTime.Now; _databaseInstance.Update(order, "fz_Orders"); var list = orderDetialService.GetOrderNo(orderNo); if (list != null) { if (order.type == OrderTypes.ticket) { foreach (var item in list) { var admissionTicket = admissionTicketService.GetById(item.sourceId); for (var i = 0; i < item.num; i++) { var ticket = new Tickets(); ticket.AdmissionTicketId = admissionTicket.id; ticket.orderNo = orderNo; ticket.Price = item.amount; ticket.State = TicketsState.NotUse; ticket.UserId = order.userId; ticket.useScope = order.useScope; ticket.adultNum = admissionTicket.adultNum; ticket.BuyTime = DateTime.Now; ticket.childNum = admissionTicket.childNum; ticket.Code = string.Format("{0:yyyyMMddHHmmssffff}", DateTime.Now) + i.ToString() + order.userId.ToString(); ticket.ExpiredDate = DateTime.Now.Date; _databaseInstance.Insert(ticket, "Tickets"); } } } else if (order.type == OrderTypes.card) { string sqlSite = "select * from Sites"; var site = new QueryObject <Site>(_databaseInstance, sqlSite, null).FirstOrDefault(); string cardNo = ""; int minxCode = 1; Int32.TryParse(site.MixCode, out minxCode); int i = 1; while (true) { minxCode = minxCode + i; cardNo = string.Format("60000000{0}", minxCode.ToString().PadLeft(8, '0')); string sqlCard = "select * from Accounts where Name=@Name"; var card = new QueryObject <Account>(_databaseInstance, sqlCard, new { Name = cardNo }).FirstOrDefault(); if (card == null) { break; } i++; } int shopId = 0; if (!string.IsNullOrWhiteSpace(order.useScope)) { string sqlShop = "select * from shops where Name=@Name"; var shop = new QueryObject <Account>(_databaseInstance, sqlShop, new { Name = order.useScope }).FirstOrDefault(); if (shop != null) { shopId = shop.ShopId; } } var item = list.FirstOrDefault(); var accountType = _databaseInstance.GetById <AccountType>("AccountTypes", item.sourceId); var account = new Account(); account.AccountLevel = 0; account.AccountToken = "11111111"; account.AccountTypeId = accountType.AccountTypeId; account.Amount = 0; account.ExpiredDate = DateTime.Now.AddMonths(accountType.ExpiredMonths); account.Frequency = accountType.Frequency; account.FrequencyUsed = 0; account.LastDealTime = DateTime.Now; account.Name = cardNo; account.OpenTime = DateTime.Now; account.OwnerId = order.userId; account.ShopId = shopId; account.useScope = order.useScope; account.SaleAmount = order.payAmount; account.TotalTimes = accountType.Frequency; if (order.payAmount > 0 && accountType.Frequency > 0) { account.SinglePrice = Convert.ToInt32(order.payAmount / accountType.Frequency); } else { account.SinglePrice = 0; } account.State = AccountStates.Normal; _databaseInstance.Insert(account, "Accounts"); site.MixCode = minxCode.ToString(); _databaseInstance.Update(site, "Sites"); } } } _databaseInstance.Commit(); }