Ejemplo n.º 1
0
        public void TestDecimal()
        {
            CashbagPaymentClientProxy service = ObjectFactory.GetInstance <CashbagPaymentClientProxy>();


            //service.PaymentProfitByCashAccount();
        }
Ejemplo n.º 2
0
        public override object Execute()
        {
            decimal refundMoney  = decimal.Parse(getParame("refundMoney").ToString());
            string  remark       = getParame("remark").ToString();
            string  operatorName = getParame("operatorName").ToString();
            string  platformCode = getParame("platformCode").ToString();

            if (refundMoney > order.OrderPay.PayMoney || refundMoney < 0)
            {
                throw new OrderCommException("订单(" + order.OrderId + ")退款金额(¥" + refundMoney + ")超出范围!");
            }
            if (order.OrderStatus == EnumOrderStatus.RepelIssueRefunding)
            {
                throw new OrderCommException("订单(" + order.OrderId + ")正在退款中。。。");
            }
            string cashbagCode         = getParame("cashbagCode").ToString();
            string cashbagKey          = getParame("cashbagKey").ToString();
            IPaymentClientProxy client = new CashbagPaymentClientProxy();
            string payType             = order.OrderPay.PayMethod.ToEnumDesc();
            string serialNum           = order.OrderPay.PaySerialNumber;
            string BuyDesc             = (order.CreateTime < DateTime.Parse("2014/07/19 04:10:00")) ? OldGetRefundDetail(order, refundMoney) : GetRefundDetail(order, refundMoney);

            Logger.WriteLog(LogType.INFO, "退款分润 时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " OrderId=" + order.OrderId + " ProfitDetail=" + BuyDesc + "\r\n");
            if (payType == EnumPayMethod.Bank.ToEnumDesc() || payType == EnumPayMethod.Platform.ToEnumDesc())
            {
                client.Reimburse(cashbagCode, cashbagKey, serialNum, refundMoney, order.OrderId, "REFUND", BuyDesc);
                //修改为拒绝出票,退款中
                order.ChangeStatus(EnumOrderStatus.RepelIssueRefunding);
                order.WriteLog(new OrderLog()
                {
                    OperationContent  = string.Format("退款状态:退款中,订单号:{0},退款金额:{1},退款方式:{2},备注:{3}", order.OrderId, refundMoney, payType, remark),
                    OperationDatetime = System.DateTime.Now,
                    OperationPerson   = string.IsNullOrEmpty(operatorName) ? "系统" : operatorName
                    ,
                    IsShowLog = true
                });
            }
            else
            {
                client.Reimburse(cashbagCode, cashbagKey, serialNum, refundMoney, order.OrderId, "退款", BuyDesc, string.Format("PNR:{0},乘机人:【{1}】", this.order.PnrCode, string.Join("|", this.order.Passengers.Select(x => x.PassengerName).ToArray())));
                //修改为拒绝出票,订单完成
                order.ChangeStatus(EnumOrderStatus.RepelIssueAndCompleted);
                order.WriteLog(new OrderLog()
                {
                    OperationContent  = string.Format("拒绝出票【退款状态:退款完成,订单号:{0},退款金额:{1},退款方式:{2},备注:{3}】", order.OrderId, refundMoney, payType, remark),
                    OperationDatetime = System.DateTime.Now,
                    OperationPerson   = string.IsNullOrEmpty(operatorName) ? "系统" : operatorName
                    ,
                    IsShowLog = true
                });
            }

            //修改保险状态
            var insuranceFac = StructureMap.ObjectFactory.GetInstance <InsuranceDomainService>();

            insuranceFac.ReturnInsurance(this.order);
            return(null);
        }
Ejemplo n.º 3
0
        private void AutoRefund(Order order)
        {
            IPaymentClientProxy client = new CashbagPaymentClientProxy();
            var    businessman         = this.businessmanRepository.FindAll(x => x.Code == order.BusinessmanCode).FirstOrDefault();
            string payType             = order.OrderPay.PayMethod.ToEnumDesc();
            string BuyDesc             = (order.CreateTime < DateTime.Parse("2014/07/19 04:10:00")) ? OldGetRefundDetail(order, order.OrderMoney) : GetRefundDetail(order, order.OrderMoney);

            if (payType == EnumPayMethod.Bank.ToEnumDesc() || payType == EnumPayMethod.Platform.ToEnumDesc())
            {
                client.Reimburse(businessman.CashbagCode, businessman.CashbagKey, order.OrderPay.PaySerialNumber, order.OrderMoney, order.OrderId, "REFUND", BuyDesc);
            }
            else
            {
                client.Reimburse(businessman.CashbagCode, businessman.CashbagKey, order.OrderPay.PaySerialNumber, order.OrderMoney, order.OrderId, "退款", BuyDesc);
            }
        }
Ejemplo n.º 4
0
        public override object Execute()
        {
            //string cashbagCode = getParame("Code").ToString();
            string cashbagCode     = getParame("cashbagCode").ToString();
            string cashbagKey      = getParame("cashbagKey").ToString();
            string collaboratorKey = getParame("collaboratorKey").ToString();
            string operatorName    = getParame("operatorName").ToString();

            string  platformCode = getParame("platformCode").ToString();
            decimal payMoney     = order.OrderPay.PayMoney;//本次需要支付的总金额

            //if (order.OrderStatus == EnumOrderStatus.PaymentInWaiting)
            //    throw new OrderCommException("该订单(" + order.OrderId + ")正在支付中,请稍后。。。");
            if (order.OrderPay.PayStatus == EnumPayStatus.OK)
            {
                throw new OrderCommException("该订单(" + order.OrderId + ")已经支付成功,不能重复支付同一个订单");
            }
            //其他参数
            var                 ticketNotify = SettingSection.GetInstances().Payment.TicketNotify;
            EnumPayMethod       payType      = (EnumPayMethod)getParame("payType");
            IPaymentClientProxy client       = new CashbagPaymentClientProxy();

            List <string> ProfitDetailList = new List <string>();

            foreach (PayBillDetail item in order.OrderPay.PayBillDetails)
            {
                if (item.OpType != EnumOperationType.PayMoney && item.OpType != EnumOperationType.Insurance && item.Money != 0)
                {
                    //接口
                    if (order.Policy.PolicySourceType == EnumPolicySourceType.Interface)
                    {
                        if (item.OpType != EnumOperationType.Receivables)
                        {
                            ProfitDetailList.Add(item.CashbagCode + "^" + item.Money + "^" + item.OpType.ToEnumDesc());
                        }
                    }
                    else
                    {
                        //非接口
                        ProfitDetailList.Add(item.CashbagCode + "^" + item.Money + "^" + item.OpType.ToEnumDesc());
                    }
                }
            }
            //分润明细
            string ProfitDetail = string.Join("|", ProfitDetailList.ToArray());

            Logger.WriteLog(LogType.INFO, "支付分润 时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " OrderId=" + order.OrderId + " ProfitDetail=" + ProfitDetail + "\r\n");
            order.OrderPay.PayMethod = payType;
            object r = null;

            if (payType == EnumPayMethod.Bank)
            {
                string bank = getParame("bank").ToString();
                order.OrderPay.PayMethodCode = bank;
                order.ChangeStatus(EnumOrderStatus.PaymentInWaiting);
                r = client.PaymentByBank(cashbagCode, cashbagKey, order.OrderId, "机票订单", payMoney, bank, ticketNotify, operatorName, ProfitDetail, GetPnrAndPassenger());
            }
            else if (payType == EnumPayMethod.Platform)
            {
                string platform = getParame("platform").ToString();
                order.OrderPay.PayMethodCode = platform;
                switch (platform.ToLower())
                {
                case "tenpay":
                    payType = EnumPayMethod.TenPay;
                    break;

                case "alipay":
                    payType = EnumPayMethod.AliPay;
                    break;
                }
                order.ChangeStatus(EnumOrderStatus.PaymentInWaiting);
                r = client.PaymentByPlatform(cashbagCode, cashbagKey, order.OrderId, "机票订单", payMoney, platform, ticketNotify, operatorName, ProfitDetail, GetPnrAndPassenger());
                order.OrderPay.PayMethod = payType;
            }
            else
            {
                string serialNumber = "";
                try
                {
                    string payPassword = getParame("payPassword").ToString();
                    if (payType == EnumPayMethod.Credit)
                    {
                        order.OrderPay.PayMethodCode = "信用账户";
                        //验证是否在风控范围内,允许使用信用账户购买
                        //serialNumber = client.PaymentByCreditAccount(cashbagCode, cashbagKey, order.OrderId, "机票订单", payMoney, payPassword, ProfitDetail, GetPnrAndPassenger());
                        var result = client.PaymentByCreditAccount(cashbagCode, cashbagKey, order.OrderId, "机票订单",
                                                                   payMoney, payPassword, ProfitDetail, GetPnrAndPassenger());
                        if (!result.Item1)
                        {
                            serialNumber = result.Item2;
                        }
                        else
                        {
                            //该订单已经被在线支付时写入日志
                            Logger.WriteLog(LogType.INFO,
                                            "订单号" + order.OrderId + "已经支付,交易号为" + result.Item2 + "支付方式为" + result.Item3);
                            //如果查询结果已经支付,则恢复订单支付方式
                            switch (result.Item3.ToLower())
                            {
                            case "tenpay":
                                order.OrderPay.PayMethod = EnumPayMethod.TenPay;
                                break;

                            case "alipay":
                                order.OrderPay.PayMethod = EnumPayMethod.AliPay;
                                break;

                            case "internetbank":
                                order.OrderPay.PayMethod = EnumPayMethod.Bank;
                                break;
                            }
                        }
                    }
                    else if (payType == EnumPayMethod.Account)
                    {
                        order.OrderPay.PayMethodCode = "现金账户";
                        //serialNumber = client.PaymentByCashAccount(cashbagCode, cashbagKey, order.OrderId, "机票订单", payMoney, payPassword, ProfitDetail, GetPnrAndPassenger());
                        var result = client.PaymentByCashAccount(cashbagCode, cashbagKey, order.OrderId, "机票订单",
                                                                 payMoney, payPassword, ProfitDetail, GetPnrAndPassenger());
                        if (!result.Item1)
                        {
                            serialNumber = result.Item2;
                        }
                        else
                        {
                            //该订单已经被在线支付时写入日志
                            Logger.WriteLog(LogType.INFO,
                                            "订单号" + order.OrderId + "已经支付,交易号为" + result.Item2 + "支付方式为" + result.Item3);
                            //如果查询结果已经支付,则恢复订单支付方式
                            switch (result.Item3.ToLower())
                            {
                            case "tenpay":
                                order.OrderPay.PayMethod = EnumPayMethod.TenPay;
                                break;

                            case "alipay":
                                order.OrderPay.PayMethod = EnumPayMethod.AliPay;
                                break;

                            case "internetbank":
                                order.OrderPay.PayMethod = EnumPayMethod.Bank;
                                break;
                            }
                        }
                    }
                    else if (payType == EnumPayMethod.AliPay)
                    {
                        string quikalipay = payType.ToEnumDesc();
                        order.OrderPay.PayMethodCode = quikalipay;
                        order.ChangeStatus(EnumOrderStatus.PaymentInWaiting);
                        r = client.PaymentByQuikAliPay(cashbagCode, cashbagKey, order.OrderId, "机票订单", payMoney, quikalipay, ticketNotify, operatorName, payPassword, ProfitDetail, GetPnrAndPassenger());
                        if (r.ToString() != "True")
                        {
                            serialNumber = r.ToString();
                        }
                    }
                }
                catch (Exception ex)
                {
                    //支付失败的日志
                    //抛出异常
                    order.WriteLog(new OrderLog()
                    {
                        OperationPerson   = operatorName,
                        OperationDatetime = DateTime.Now,
                        OperationContent  = "使用" + payType.ToEnumDesc() + "支付失败",
                        IsShowLog         = true
                    });
                    Logger.WriteLog(LogType.INFO,
                                    "支付失败 时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " OrderId=" +
                                    order.OrderId + " 异常信息=" + ex.Message + "\r\n");
                    throw new CustomException(00001, ex.Message);
                }
                if (!string.IsNullOrEmpty(serialNumber))
                {
                    //支付成功后,修改日志。改变状态,进行代付
                    order.PayToPaid(operatorName, payType, order.OrderPay.PayMethodCode, serialNumber, "支付");
                }
            }
            return(r);
        }