Пример #1
0
        /// <summary>
        /// 发送同步支付模板信息
        /// </summary>
        /// <param name="order"></param>
        /// <returns></returns>
        private static bool SendSyncResultMessage(OnlineOrder order)
        {
            try
            {
                if (order.PaymentChannel != PaymentChannel.WeiXinPay)
                {
                    return(true);
                }

                switch (order.OrderType)
                {
                case OnlineOrderType.MonthCardRecharge:
                {
                    return(TemplateMessageServices.SendMonthCardRechargeSuccess(order.CompanyID, order.PlateNo, order.PKName, order.Amount, order.ExitTime, order.PayAccount));
                }

                case OnlineOrderType.ParkFee:
                {
                    return(TemplateMessageServices.SendParkCarPaymentSuccess(order.CompanyID, order.PlateNo, order.PKName, order.Amount, order.EntranceTime, order.OrderTime, order.RealPayTime, order.ExitTime, order.PayAccount));
                }

                case OnlineOrderType.PkBitBooking:
                {
                    return(true);
                }

                case OnlineOrderType.SellerRecharge:
                {
                    IParkSeller factory = ParkSellerFactory.GetFactory();
                    ParkSeller  model   = factory.QueryBySellerId(order.InOutID);
                    if (model == null)
                    {
                        throw new MyException("商家不存在");
                    }

                    return(TemplateMessageServices.SendSellerRechargeSuccess(order.CompanyID, order.Amount, model.Balance, order.RealPayTime, order.PayAccount));
                }

                default: throw new MyException("同步支付结果时找不到订单类型");
                }
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptionToDbAndTxt("OnlineOrderServices", "发送模板信息失败:订单编号:" + order.OrderID + "", ex, LogFrom.WeiXin);
                return(false);
            }
        }
Пример #2
0
        private static bool Refund(OnlineOrder model, string certpath)
        {
            IOnlineOrder factory       = OnlineOrderFactory.GetFactory();
            bool         refundResult  = false;
            string       refundOrderId = IdGenerator.Instance.GetId().ToString();

            using (DbOperator dbOperator = ConnectionManager.CreateConnection())
            {
                try
                {
                    dbOperator.BeginTransaction();
                    refundResult = factory.RefundSuccess(model.OrderID, refundOrderId, dbOperator);
                    if (!refundResult)
                    {
                        throw new MyException("更改订单为退款成功时失败");
                    }
                    switch (model.PaymentChannel)
                    {
                    case PaymentChannel.WeiXinPay: {
                        string refundAmount = ((int)(model.Amount * 100)).ToString();
                        refundResult = PaymentServices.Refund(model.CompanyID, model.SerialNumber, model.OrderID.ToString(), refundAmount, refundAmount, refundOrderId, certpath);
                        TxtLogServices.WriteTxtLogEx("OnlineOrderServices", string.Format("方法名:{0},操作类型:{1},订单编号:{2},备注:{3} {4}", "Refund", "订单退款处理", model.OrderID, model.SerialNumber.ToString(), (model.Amount / 100).ToString("F2"), refundOrderId));
                        if (!refundResult)
                        {
                            throw new MyException("微信退款失败");
                        }
                        break;
                    }

                    case PaymentChannel.AliPay:
                    {
                        refundResult = AliPayApiServices.RefundRequest(model.CompanyID, model.OrderID.ToString(), model.SerialNumber.ToString(), model.Amount.ToString("F2"), "车场网络异常", refundOrderId);
                        TxtLogServices.WriteTxtLogEx("OnlineOrderServices", string.Format("方法名:{0},操作类型:{1},订单编号:{2},备注:{3} {4}", "Refund", "订单退款处理", model.OrderID, model.SerialNumber.ToString(), (model.Amount / 100).ToString("F2"), refundOrderId));
                        if (!refundResult)
                        {
                            throw new MyException("支付宝退款失败");
                        }
                        break;
                    }

                    default: throw new MyException("退款渠道不正确");
                    }
                    dbOperator.CommitTransaction();
                    TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "方法名:{0},操作类型:{1},订单编号:{2},备注:{3}", "Refund", "订单退款处理", model.OrderID, "退款成功");
                }
                catch (Exception ex)
                {
                    refundResult = false;
                    dbOperator.RollbackTransaction();
                    ExceptionsServices.AddExceptionToDbAndTxt("OnlineOrderServices", string.Format("订单退款失败,订单编号{0},描述:{1}", model.OrderID, ex.Message), ex, LogFrom.WeiXin);
                }
                if (!refundResult)
                {
                    factory.RefundFail(model.OrderID);
                }
                if (model.PaymentChannel == PaymentChannel.WeiXinPay)
                {
                    if (!refundResult)
                    {
                        switch (model.OrderType)
                        {
                        case OnlineOrderType.PkBitBooking: {
                            TemplateMessageServices.SendBookingBitNoRefundFail(model.CompanyID, model.OrderID.ToString(), "车场网络异常", model.Amount, model.PayAccount);
                            break;
                        }

                        case OnlineOrderType.SellerRecharge: {
                            TemplateMessageServices.SendSellerRechargeRefundFail(model.CompanyID, model.OrderID.ToString(), "车场网络异常", model.Amount, model.PayAccount);
                            break;
                        }

                        default: {
                            TemplateMessageServices.SendParkingRefundFail(model.CompanyID, model.OrderID.ToString(), "车场网络异常", model.Amount, model.PayAccount);
                            break;
                        }
                        }
                    }
                    else
                    {
                        string message = string.IsNullOrWhiteSpace(model.Remark) ? "车场网络异常" : model.Remark;
                        switch (model.OrderType)
                        {
                        case OnlineOrderType.PkBitBooking:
                        {
                            TemplateMessageServices.SendBookingBitNoRefundSuccess(model.CompanyID, model.OrderID.ToString(), message, model.Amount, model.PayAccount);
                            break;
                        }

                        case OnlineOrderType.SellerRecharge:
                        {
                            TemplateMessageServices.SendSellerRechargeRefundSuccess(model.CompanyID, model.OrderID.ToString(), message, model.Amount, model.PayAccount);
                            break;
                        }

                        default:
                        {
                            TemplateMessageServices.SendParkingRefundSuccess(model.CompanyID, model.OrderID.ToString(), message, model.Amount, model.PayAccount);
                            break;
                        }
                        }
                    }
                }
            }
            return(refundResult);
        }