Exemplo n.º 1
0
        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");
            }
        }
Exemplo n.º 2
0
        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");
            }
        }
Exemplo n.º 3
0
        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");
            }
        }
Exemplo n.º 4
0
        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");
            }
        }