public ActionResult NotifyWxHtml(WxNotifyPostRequest request) { Dictionary<string, string> sPara = GetQueryStringParams(); if (sPara.Count > 0) { var requestSign = sPara["sign"]; sPara.Remove("sign"); var notifySigned = Util.NotifySignHtml(sPara); if (string.Compare(requestSign, notifySigned, true) != 0) return Content("fail"); //external order no string out_trade_no = sPara["out_trade_no"]; string trade_no = sPara["transaction_id"]; int trade_status = int.Parse(sPara["trade_state"]); string bank_bill_no = sPara["bank_billno"]; var amount = decimal.Parse(sPara["total_fee"]) / 100; if (trade_status == 0) { var orderEntity = Context.Set<OrderEntity>().Where(o => o.OrderNo == out_trade_no).FirstOrDefault(); var paymentEntity = Context.Set<OrderTransactionEntity>().Where(p => p.OrderNo == orderEntity.OrderNo && p.PaymentCode == WxPayConfig.PAYMENT_CODE4HTML && (!p.OrderType.HasValue || p.OrderType.Value == (int)PaidOrderType.Self)).FirstOrDefault(); if (paymentEntity == null && orderEntity != null) { OrderTransactionEntity orderTransaction = null; using (var ts = new TransactionScope()) { _paymentNotifyRepo.Insert(new PaymentNotifyLogEntity() { CreateDate = DateTime.Now, OrderNo = orderEntity.OrderNo, PaymentCode = WxPayConfig.PAYMENT_CODE4HTML, PaymentContent = JsonConvert.SerializeObject(sPara) }); orderTransaction = _orderTranRepo.Insert(new OrderTransactionEntity() { Amount = amount, OrderNo = orderEntity.OrderNo, CreateDate = DateTime.Now, IsSynced = false, PaymentCode = WxPayConfig.PAYMENT_CODE4HTML, TransNo = trade_no, OrderType = (int)PaidOrderType.Self }); if (orderEntity.Status != (int)OrderStatus.Paid && orderEntity.TotalAmount <= amount) { orderEntity.Status = (int)OrderStatus.Paid; orderEntity.UpdateDate = DateTime.Now; orderEntity.RecAmount = amount; _orderRepo.Update(orderEntity); _orderlogRepo.Insert(new OrderLogEntity() { CreateDate = DateTime.Now, CreateUser = 0, CustomerId = orderEntity.CustomerId, Operation = "支付订单", OrderNo = orderEntity.OrderNo, Type = (int)OrderOpera.CustomerPay }); } ts.Complete(); } //notify sync async if (orderTransaction != null) { Task.Factory.StartNew(() => { OrderRule.OrderPaid2Erp(orderTransaction); }); } } } return Content("success"); } else { return Content("fail"); } }
public ActionResult NotifyWxErp(WxNotifyPostRequest request) { Dictionary<string, string> sPara = GetQueryStringParams(); if (sPara.Count > 0) { var requestSign = sPara["sign"]; sPara.Remove("sign"); var notifySigned = Util.NotifySign(sPara); if (string.Compare(requestSign, notifySigned, true) != 0) { Log.Info(string.Format("{0} vs {1}",requestSign,notifySigned)); return Content("fail"); } //external order no string out_trade_no = sPara["out_trade_no"]; string trade_no = sPara["transaction_id"]; int trade_status = int.Parse(sPara["trade_state"]); string bank_bill_no = sPara["bank_billno"]; var amount = decimal.Parse(sPara["total_fee"]) / 100; if (trade_status == 0) { var paymentEntity = Context.Set<OrderTransactionEntity>().Where(p => p.OrderNo == out_trade_no && p.PaymentCode == WxPayConfig.PaymentCode && p.OrderType == (int)PaidOrderType.Erp).FirstOrDefault(); if (paymentEntity == null) { OrderTransactionEntity orderTransaction = null; using (var ts = new TransactionScope()) { _paymentNotifyRepo.Insert(new PaymentNotifyLogEntity() { CreateDate = DateTime.Now, OrderNo = out_trade_no, PaymentCode = WxPayConfig.PaymentCode, PaymentContent = JsonConvert.SerializeObject(sPara) }); orderTransaction= _orderTranRepo.Insert(new OrderTransactionEntity() { Amount = amount, OrderNo = out_trade_no, CreateDate = DateTime.Now, IsSynced = false, PaymentCode = WxPayConfig.PaymentCode, TransNo = trade_no, OutsiteType = (int)OutsiteType.WX, OutsiteUId = request.OpenId, OrderType = (int)PaidOrderType.Erp }); _exorderRepo.Insert(new ExOrderEntity() { ExOrderNo = out_trade_no, Amount = amount, PaidDate = DateTime.Now, PaymentCode = WxPayConfig.PaymentCode, OrderType = (int)PaidOrderType.Erp, IsShipped = false }); /* bool isSuccess = false; var targetUrl = new Dictionary<string, string>() { {"productname","详见小票"} , {"quantity","详见小票"} ,{"expdate","详见小票"} }.Aggregate(new StringBuilder(), (s, e) => s.AppendFormat("{0}={1}&", e.Key, HttpUtility.UrlEncode(e.Value)) , s => s.ToString().TrimEnd('&')); isSuccess = WxServiceHelper.SendMessage(new { touser = request.OpenId, template_id = WxPayConfig.MESSAGE_TEMPLATE_ID, url =string.Format("{0}?{1}",WeigouConfig.MESSAGE_TARGET_URL,targetUrl), data = new { productType = new { value = "商品名", color = "#000000" }, name = new { value = "详见小票", color = "#173177" }, number = new { value = "详见小票", color = "#173177" }, expDate = new { value = "详见小票", color = "#173177" }, } }, null, null); * */ ts.Complete(); } //notify sync async if (orderTransaction != null) { Task.Factory.StartNew(() => { OrderRule.OrderPaid2Erp(orderTransaction, false); }); } } } return Content("success"); } else { return Content("fail"); } }
public ActionResult NotifyWxErp2(WxNotifyPostRequest request) { Dictionary<string, string> sPara = GetQueryStringParams(); if (sPara.Count > 0) { var requestSign = sPara["sign"]; sPara.Remove("sign"); var notifySigned = Util.NotifySign(sPara); if (string.Compare(requestSign, notifySigned, true) != 0) return Content("fail"); //external order no string out_trade_no = sPara["out_trade_no"]; string trade_no = sPara["transaction_id"]; int trade_status = int.Parse(sPara["trade_state"]); string bank_bill_no = sPara["bank_billno"]; var amount = decimal.Parse(sPara["total_fee"]) / 100; if (trade_status == 0) { var paymentEntity = Context.Set<OrderTransactionEntity>().Where(p => p.OrderNo == out_trade_no && p.PaymentCode == WxPayConfig.PaymentCode && p.OrderType == (int)PaidOrderType.Erp2).FirstOrDefault(); if (paymentEntity == null) { OrderTransactionEntity orderTransaction = null; using (var ts = new TransactionScope()) { _paymentNotifyRepo.Insert(new PaymentNotifyLogEntity() { CreateDate = DateTime.Now, OrderNo = out_trade_no, PaymentCode = WxPayConfig.PaymentCode, PaymentContent = JsonConvert.SerializeObject(sPara) }); orderTransaction = _orderTranRepo.Insert(new OrderTransactionEntity() { Amount = amount, OrderNo = out_trade_no, CreateDate = DateTime.Now, IsSynced = false, PaymentCode = WxPayConfig.PaymentCode, TransNo = trade_no, OutsiteType = (int)OutsiteType.WX, OutsiteUId = request.OpenId, OrderType = (int)PaidOrderType.Erp2 }); _exorderRepo.Insert(new ExOrderEntity() { ExOrderNo = out_trade_no, Amount = amount, PaidDate = DateTime.Now, PaymentCode = WxPayConfig.PaymentCode, OrderType = (int)PaidOrderType.Erp2, IsShipped = false }); ts.Complete(); } //notify sync async if (orderTransaction != null) { Task.Factory.StartNew(() => { OrderRule.OrderPaid2Erp(orderTransaction, false); }); } } } return Content("success"); } else { return Content("fail"); } }
public ActionResult NotifyWx(WxNotifyPostRequest request) { Dictionary<string, string> sPara = GetQueryStringParams(); if (sPara.Count > 0) { var requestSign = sPara["sign"]; sPara.Remove("sign"); var notifySigned = Util.NotifySign(sPara); if (string.Compare(requestSign, notifySigned, true) != 0) return Content("fail"); //external order no string out_trade_no = sPara["out_trade_no"]; string trade_no = sPara["transaction_id"]; int trade_status = int.Parse(sPara["trade_state"]); string bank_bill_no = sPara["bank_billno"]; var amount = decimal.Parse(sPara["total_fee"]) / 100; if (trade_status == 0) { var orderEntity = Context.Set<OrderEntity>().Join(Context.Set<Order2ExEntity>().Where(oe => oe.ExOrderNo == out_trade_no), o => o.OrderNo, i => i.OrderNo, (o, i) => o).FirstOrDefault(); var paymentEntity = Context.Set<OrderTransactionEntity>().Where(p => p.OrderNo == orderEntity.OrderNo && p.PaymentCode == WxPayConfig.PaymentCode && (!p.OrderType.HasValue || p.OrderType.Value==(int)PaidOrderType.Self)).FirstOrDefault(); if (paymentEntity == null && orderEntity != null) { OrderTransactionEntity orderTransaction = null; using (var ts = new TransactionScope()) { _paymentNotifyRepo.Insert(new PaymentNotifyLogEntity() { CreateDate = DateTime.Now, OrderNo = orderEntity.OrderNo, PaymentCode = WxPayConfig.PaymentCode, PaymentContent = JsonConvert.SerializeObject(sPara) }); orderTransaction= _orderTranRepo.Insert(new OrderTransactionEntity() { Amount = amount, OrderNo = orderEntity.OrderNo, CreateDate = DateTime.Now, IsSynced = false, PaymentCode = WxPayConfig.PaymentCode, TransNo = trade_no, OutsiteType = (int)OutsiteType.WX, OutsiteUId = request.OpenId, OrderType =(int)PaidOrderType.Self }); if (orderEntity.Status != (int)OrderStatus.Paid && orderEntity.TotalAmount <= amount) { orderEntity.Status = (int)OrderStatus.Paid; orderEntity.UpdateDate = DateTime.Now; orderEntity.RecAmount = amount; _orderRepo.Update(orderEntity); _orderlogRepo.Insert(new OrderLogEntity() { CreateDate = DateTime.Now, CreateUser = 0, CustomerId = orderEntity.CustomerId, Operation = "支付订单", OrderNo = orderEntity.OrderNo, Type = (int)OrderOpera.CustomerPay }); } bool isSuccess = false; var orderItemEntity = Context.Set<OrderItemEntity>().Where(o => o.OrderNo == orderEntity.OrderNo).FirstOrDefault(); var expDate = string.Format("{0}之前", DateTime.Today.AddDays(1).ToShortDateString()); var detailRemark = string.Format("提货码:{0} 专柜:{1}", out_trade_no, orderEntity.ShippingAddress); var targetUrl = new Dictionary<string, string>() { {"productname",orderItemEntity.ProductName} , {"quantity",orderItemEntity.Quantity.ToString()} ,{"expdate",expDate} ,{"remark",detailRemark} }.Aggregate(new StringBuilder(), (s, e) => s.AppendFormat("{0}={1}&", e.Key, HttpUtility.UrlEncode(e.Value)) , s => s.ToString().TrimEnd('&')); isSuccess = WxServiceHelper.SendMessage(new { touser = request.OpenId, template_id = WxPayConfig.MESSAGE_TEMPLATE_ID, url = string.Format("{0}?{1}",WeigouConfig.MESSAGE_TARGET_URL,targetUrl), data = new { productType = new { value = "商品名", color = "#000000" }, name = new { value = orderItemEntity.ProductName, color = "#173177" }, number = new { value = orderItemEntity.Quantity.ToString(), color = "#173177" }, expDate =new { value = expDate, color = "#173177" }, remark = new { value = detailRemark, color = "#173177" } } }, null, null); if (isSuccess) ts.Complete(); else return Content("fail"); ts.Complete(); } //notify sync async if (orderTransaction != null) { Task.Factory.StartNew(() => { OrderRule.OrderPaid2Erp(orderTransaction); }); } } } return Content("success"); } else { return Content("fail"); } }