Esempio n. 1
0
    /// <summary>
    /// 退款处理
    /// </summary>
    /// <param name="payType">支付方式</param>
    /// <param name="oldOrderId">原支付订单号</param>
    /// <param name="newOrderId">退款订单号</param>
    /// <param name="onlineNo">在线交易号、退款流水号</param>
    /// <param name="price">订单金额</param>
    /// <param name="rate">手续费率</param>
    /// <param name="act">收款账号</param>
    /// <param name="detail">退款明细</param>
    /// <returns></returns>
    public string Refund(string payType, string oldOrderId, string newOrderId, string onlineNo, string price, string rate, string act, string detail)
    {
        string msg = "";

        try
        {
            string strOrderID       = newOrderId; //订单编号(退、废)
            string strOrderOldID    = oldOrderId; //原支付订单号
            string strOrderOnlineNo = onlineNo;   //交易号
            string strPrice         = price;      // 退款金额
            string strAct           = act;        //收款账号
            string details          = detail;     //退款明细


            decimal strRate = (!string.IsNullOrEmpty(rate)) ? decimal.Parse(rate) : 0.001M; //费率
            bool    result  = false;
            msg = (string.IsNullOrEmpty(strPrice)) ? "请输入退款金额!" : msg;
            msg = (string.IsNullOrEmpty(strAct)) ? "请输入收款账号!" : msg;
            decimal total = (!string.IsNullOrEmpty(strPrice)) ? decimal.Parse(strPrice) : 0; //订单退款金额
            total = total != 0 ? FourToFiveNum(total, 2) : total;

            if (payType == "1")
            {
                #region 支付宝
                msg = (string.IsNullOrEmpty(strOrderOnlineNo)) ? "请输入交易号!" : msg;
                msg = (strOrderOnlineNo.Length != 16) ? "交易号格式错误!" : msg;

                if (msg == "")
                {
                    PbProject.Logic.Pay.AliPay alipay = new PbProject.Logic.Pay.AliPay(false);

                    #region 处理
                    decimal priceRate = total * strRate; //费率
                    priceRate = FourToFiveNum(priceRate, 2);
                    decimal priceGy = total - priceRate; //供应退款
                    priceGy = FourToFiveNum(priceGy, 2);

                    if (string.IsNullOrEmpty(details))
                    {
                        details = strOrderOnlineNo + "^" + total.ToString("f2") + "^退款|" + act + "^^" + alipay._serveremail + "^^" + priceGy.ToString("f2") + "^退款";
                    }

                    if (strOrderOnlineNo != null && strOrderOnlineNo != "")
                    {
                        string bno = DateTime.Now.ToString("yyyyMMddHHmmsss");

                        string[] strValueS = new string[3];
                        strValueS[0] = bno;
                        strValueS[1] = "1";
                        strValueS[2] = details;

                        //退款
                        result = alipay.IsRefund(strValueS);

                        if (result == true)
                        {
                            msg = "数据提交成功,稍后请查询核对数据。。。";

                            #region 支付宝 查询退款

                            /*
                             * if (msg == "")
                             * {
                             *  string str = alipay.QueryRefundResultStr(strOrderOnlineNo);
                             *  string[] strs = str.Split('#');
                             *  for (int i = 0; i < strs.Length; i++)
                             *  {
                             *      if (!string.IsNullOrEmpty(strs[i]))
                             *      {
                             *          string[] strss = strs[i].Split('$');
                             *
                             *          if (!string.IsNullOrEmpty(strss[0]) && strss[0].Contains("SUCCESS"))
                             *          {
                             *              //退款成功
                             *              msg += "退款成功!银行卡 2 - 7个工作日到账,信用卡 2 - 14 个工作日到账!";
                             *              break;
                             *          }
                             *      }
                             *  }
                             * }
                             * */
                            #endregion
                        }
                        else
                        {
                            msg = "数据提交失败,请检测数据格式是否有误!!!";
                        }
                    }
                    #endregion
                }
                #endregion
            }
            else if (payType == "2")
            {
                #region 快钱
                msg = (string.IsNullOrEmpty(strOrderID)) ? "请输入订单号!" : msg;     //订单编号(退、废)
                msg = (string.IsNullOrEmpty(strOrderOldID)) ? "请输入原订单号!" : msg; //原支付订单号

                if (msg == "")
                {
                    #region 处理

                    PbProject.Logic.Pay._99Bill bill = new PbProject.Logic.Pay._99Bill(false);

                    string  dataTime  = DateTime.Now.ToString("yyyyMMddHHmmss");
                    decimal priceRate = total * strRate; //费率
                    priceRate = FourToFiveNum(priceRate, 2);
                    decimal priceGy = total - priceRate; //供应退款
                    priceGy = FourToFiveNum(priceGy, 2);

                    priceGy   = priceGy * 100;                              //供应退款
                    priceRate = priceRate * 100;                            //费率
                    total     = total * 100;                                //订单退款

                    int p1 = int.Parse(priceGy.ToString().Split('.')[0]);   //供应退款
                    int p2 = int.Parse(priceRate.ToString().Split('.')[0]); //费率
                    int p3 = int.Parse(total.ToString().Split('.')[0]);     //订单退款

                    //"1^[email protected]^5000^爱的|1^[email protected]^7000^分账1|1^[email protected]^8000^分账2";
                    if (string.IsNullOrEmpty(details))
                    {
                        details = "1^" + bill.LinkEmail + "^" + p2.ToString() + "^Refund|1^" + strAct + "^" + p1.ToString() + "^Refund";
                    }

                    string[] Details = new string[6];
                    Details[0] = strOrderOldID; // 订单编号(原订单号)
                    Details[1] = p3.ToString(); // 订单金额
                    Details[2] = "系统退款";        //备注
                    Details[3] = details;
                    Details[4] = strOrderID;    // 订单编号(退废订单编号)
                    Details[5] = dataTime;      //退款流水号


                    string str = bill.Refund(Details);

                    result = bill.IsRefund(str);
                    //result = true;

                    if (result == true)
                    {
                        msg = "数据提交成功,稍后请查询核对数据。。。";
                    }
                    else
                    {
                        msg = "数据提交失败,请检测数据格式是否有误!!!";
                    }

                    #endregion
                }
                #endregion
            }
            else if (payType == "3")
            {
                #region 汇付

                msg = (string.IsNullOrEmpty(strOrderID)) ? "请输入订单号!" : "";     //订单编号(退、废)
                msg = (string.IsNullOrEmpty(strOrderOldID)) ? "请输入原订单号!" : ""; //原支付订单号

                if (msg == "")
                {
                    #region 处理

                    PbProject.Logic.Pay.ChinaPnr chinaPnr = new PbProject.Logic.Pay.ChinaPnr(false);

                    string orderno = DateTime.Now.ToString("yyyyMMddHHmm");
                    string orderid = (strOrderID == strOrderOldID) ? orderno + "_" + strOrderOldID : strOrderID; //订单编号

                    decimal priceRate = total * strRate;                                                         //费率
                    priceRate = FourToFiveNum(priceRate, 2);
                    decimal priceGy = total - priceRate;                                                         //供应退款
                    priceGy = FourToFiveNum(priceGy, 2);

                    if (string.IsNullOrEmpty(details))
                    {
                        details = "Agent:" + act + ":" + priceGy.ToString("f2");
                    }

                    string[] Details = new string[4];
                    Details[0] = orderid;
                    Details[1] = strOrderOldID;
                    Details[2] = strPrice;
                    Details[3] = details;

                    string value = chinaPnr.Refund(Details[0], Details[1], Details[2], Details[3]);

                    if (value.Contains("RespCode=000000") && value.Contains("ErrMsg=成功"))
                    {
                        msg = "数据提交成功,稍后请查询核对数据。。。";
                    }
                    else
                    {
                        msg = "数据提交失败,请检测数据格式是否有误!!!";
                    }
                    #endregion
                }
                #endregion
            }
            else if (payType == "4")
            {
                #region 财付通


                #endregion
            }
            else
            {
                msg = "请选择支付方式";
            }
        }
        catch (Exception)
        {
        }

        return(msg);
    }
Esempio n. 2
0
        /// <summary>
        /// 退款处理
        /// </summary>
        /// <param name="mOrder">订单 Model</param>
        /// <param name="uEmployees">用户 Model</param>
        /// <param name="uCompany">公司 Model</param>
        /// <returns></returns>
        public bool TitckOrderRefund(Tb_Ticket_Order mOrder, User_Employees uEmployees, User_Company uCompany, out string msg)
        {
            bool result = false;

            msg = "";

            try
            {
                if (mOrder.PayWay == 1 || mOrder.PayWay == 5)
                {
                    #region 支付宝

                    AliPay aliPay  = new AliPay();
                    string strTime = DateTime.Now.ToString("yyyyMMdd");

                    string bno = strTime + mOrder.OrderId + DateTime.Now.ToString("HHmm");

                    string detail_data = "";

                    string[] Details = new string[3];
                    Details[0] = bno; //批次号规则
                    Details[1] = "1"; //1.要退款的支付宝交易号
                    //2.退款参数
                    detail_data = mOrder.PayNo + "^" + mOrder.PayMoney.ToString("F2") + "^退款|" + "";

                    #region 分账信息

                    string tempSqlWhere = " OrderId='" + mOrder.OrderId + "'";
                    List <Tb_Order_PayDetail> payDetailList = new PbProject.Logic.Order.Tb_Order_PayDetailBLL().GetListBySqlWhere(tempSqlWhere);

                    payDetailList = bill.OnLinePayDetails(payDetailList);

                    #endregion 分账信息

                    Tb_Order_PayDetail payDetail    = null;
                    decimal            realPayMoney = 0;

                    for (int i = 0; i < payDetailList.Count; i++)
                    {
                        payDetail    = payDetailList[i];
                        realPayMoney = payDetail.RealPayMoney;

                        if (payDetail.PayType == "付款" || realPayMoney == 0)
                        {
                            continue;
                        }

                        detail_data += payDetail.PayAccount + "^^" + aliPay._serveremail + "^^" + realPayMoney.ToString("F2") + "^退" + payDetail.PayType + "|";
                    }
                    detail_data = detail_data.TrimEnd('|');
                    Details[2]  = detail_data;

                    result = aliPay.IsRefund(Details);

                    if (result)
                    {
                        bill.CreateBillRefundFailedLog(uEmployees, mOrder.OrderId, "提交退款成功,等待退款......"); //退款失败
                    }
                    else
                    {
                        bill.CreateBillRefundFailedLog(uEmployees, mOrder.OrderId, "提交退款失败"); //退款失败
                    }

                    #endregion
                }
                else if (mOrder.PayWay == 2 || mOrder.PayWay == 6)
                {
                    #region 快钱

                    _99Bill _99bill  = new _99Bill();
                    string  dataTime = DateTime.Now.ToString("yyyyMMddHHmmss");

                    string  detail_data = "";
                    decimal total       = mOrder.PayMoney;                              //退款金额

                    int orderPrice = int.Parse((total * 100).ToString().Split('.')[0]); //退款金额 分为单位
                    int tempPrice  = 0;

                    #region 分账信息

                    string tempSqlWhere = " OrderId='" + mOrder.OrderId + "'";
                    List <Tb_Order_PayDetail> payDetailList = new PbProject.Logic.Order.Tb_Order_PayDetailBLL().GetListBySqlWhere(tempSqlWhere);

                    payDetailList = bill.OnLinePayDetails(payDetailList);

                    #endregion 分账信息

                    Tb_Order_PayDetail payDetail    = null;
                    decimal            realPayMoney = 0;
                    int allTempPrice = 0;

                    for (int i = 0; i < payDetailList.Count; i++)
                    {
                        payDetail    = payDetailList[i];
                        realPayMoney = payDetail.RealPayMoney;

                        if (payDetail.PayType == "付款" || realPayMoney == 0)
                        {
                            continue;
                        }

                        tempPrice = int.Parse((realPayMoney * 100).ToString().Split('.')[0]);//退款金额 分为单位

                        //"1^[email protected]^5000^爱的|1^[email protected]^7000^分账1|1^[email protected]^8000^分账2";
                        // Details[3] = "1^" + LinkEmail + "^" + p2 + "^Refund|1^" + account + "^" + p1 + "^Refund";

                        detail_data += "1^" + payDetail.PayAccount + "^" + tempPrice + "^Refund|";

                        allTempPrice += tempPrice;
                    }
                    tempPrice    = orderPrice - allTempPrice;
                    detail_data += "1^" + _99bill.LinkEmail + "^" + tempPrice + "^Refund|"; //主账号退款 , 用于退款平衡

                    detail_data = detail_data.TrimEnd('|');

                    string[] Details = new string[6];

                    string OldOrderId = (string.IsNullOrEmpty(mOrder.OldOrderId)) ? mOrder.OrderId : mOrder.OldOrderId;
                    Details[0] = OldOrderId;                              // 订单编号(原订单号)
                    Details[1] = orderPrice.ToString();                   // 订单金额
                    Details[2] = "系统退款";                                  //备注
                    Details[3] = detail_data;                             //退款明细
                    Details[4] = mOrder.OrderId;                          // 订单编号(退废订单编号)
                    Details[5] = DateTime.Now.ToString("yyyyMMddHHmmss"); //退款流水号

                    string str = _99bill.Refund(Details);

                    //PbProject.WebCommon.Log.Log.RecordLog("RefundOper", str, false, null);//日志

                    result = _99bill.IsRefund(str);

                    if (result == true)
                    {
                        //退款成功,处理订单状态
                        string indexno = Details[5] + Details[4];  // 退款成功流水号
                        bill.CreateBillRefund(mOrder.OrderId, indexno, 2, "在线退款", "快钱退款", str);
                    }
                    else
                    {
                        //退款失败日志
                        bill.CreateBillRefundFailedLog(uEmployees, mOrder.OrderId, "退款失败,请检查:" + str); //退款失败
                    }

                    #endregion
                }
                else if (mOrder.PayWay == 3 || mOrder.PayWay == 7)
                {
                    #region 汇付

                    ChinaPnr chinaPnr = new ChinaPnr();

                    string dataTime = DateTime.Now.ToString("yyyyMMddHHmmss");

                    string  detail_data = "";
                    decimal total       = mOrder.PayMoney; //退款金额


                    #region 分账信息

                    string tempSqlWhere = " OrderId='" + mOrder.OrderId + "'";
                    List <Tb_Order_PayDetail> payDetailList = new PbProject.Logic.Order.Tb_Order_PayDetailBLL().GetListBySqlWhere(tempSqlWhere);

                    payDetailList = bill.OnLinePayDetails(payDetailList);

                    #endregion 分账信息

                    Tb_Order_PayDetail payDetail    = null;
                    decimal            realPayMoney = 0;

                    for (int i = 0; i < payDetailList.Count; i++)
                    {
                        payDetail    = payDetailList[i];
                        realPayMoney = payDetail.RealPayMoney;

                        if (payDetail.PayType == "付款" || realPayMoney == 0)
                        {
                            continue;
                        }

                        detail_data += "Agent:" + payDetail.PayAccount + ":" + realPayMoney.ToString("f2") + ";";
                    }

                    detail_data = detail_data.TrimEnd(';');

                    string strOrderOldID = string.IsNullOrEmpty(mOrder.OldOrderId) ? mOrder.OrderId : mOrder.OldOrderId;

                    string[] Details = new string[4];
                    Details[0] = mOrder.OrderId;   //订单编号
                    Details[1] = strOrderOldID;    //原订单编号
                    Details[2] = total.ToString(); //退款总金额
                    Details[3] = detail_data;      //退分润数据集

                    string value = chinaPnr.Refund(Details[0], Details[1], Details[2], Details[3]);

                    if (value.Contains("RespCode=000000") && value.Contains("ErrMsg=成功"))
                    {
                        result = true;
                    }

                    if (result == true)
                    {
                        string indexno = mOrder.OrderId;  // 退款成功流水号
                        bill.CreateBillRefund(mOrder.OrderId, indexno, 3, "在线退款", "汇付退款", value);
                    }
                    else
                    {
                        bill.CreateBillRefundFailedLog(uEmployees, mOrder.OrderId, "退款失败,请检查:" + value); //退款失败
                    }

                    #endregion
                }
                else if (mOrder.PayWay == 4 || mOrder.PayWay == 8 || mOrder.PayWay == 40)
                {
                    #region 财付通
                    // 财付通 暂时不处理
                    TenPayParam tenPayParam = new TenPayParam();
                    //内部订单号
                    tenPayParam.Orderid = mOrder.OrderId;
                    //旧订单号
                    if (!String.IsNullOrEmpty(mOrder.OldOrderId))
                    {
                        tenPayParam.OldOrderid = mOrder.OldOrderId;
                    }
                    else
                    {
                        tenPayParam.OldOrderid = mOrder.OrderId;
                    }
                    //财付通交易号
                    tenPayParam.PayNo = mOrder.PayNo;
                    //总金额
                    Tb_Ticket_Order tbTicketOrder = new PbProject.Logic.Order.Tb_Ticket_OrderBLL().GetTicketOrderByOrderId(tenPayParam.OldOrderid);
                    if (tbTicketOrder != null)
                    {
                        tenPayParam.Total_Tee = (tbTicketOrder.PayMoney * 100).ToString("F0");
                    }
                    else
                    {
                        tenPayParam.Total_Tee = (mOrder.PayMoney * 100).ToString("F0");
                    }
                    tenPayParam.Date = (mOrder.PayMoney * 100).ToString("F0");
                    /*---------------------分账信息----------------------------*/
                    string                    detail_data   = string.Format("{0}|", (mOrder.PayMoney * 100).ToString("F0"));
                    string                    tempSqlWhere  = " OrderId='" + mOrder.OrderId + "'";
                    Tb_Order_PayDetail        payDetail     = null;
                    decimal                   realPayMoney  = 0;
                    List <Tb_Order_PayDetail> payDetailList = new PbProject.Logic.Order.Tb_Order_PayDetailBLL().GetListBySqlWhere(tempSqlWhere);

                    /*
                     * for (int i = 0; i < payDetailList.Count; i++)
                     * {
                     *  payDetail = payDetailList[i];
                     *  if (payDetail.PayType == "付款")
                     *  {
                     *      tenPayParam.BackState = payDetail.A1;
                     *  }
                     *  if (payDetail.PayType == "手续费")
                     *  {
                     *      realPayMoney = payDetail.BuyPoundage;
                     *      detail_data += string.Format("{0}^{1}|", payDetail.PayAccount, (realPayMoney * 100).ToString("F0"));
                     *  }
                     * }
                     */
                    //
                    payDetailList = bill.OnLinePayDetails(payDetailList);
                    for (int i = 0; i < payDetailList.Count; i++)
                    {
                        payDetail    = payDetailList[i];
                        realPayMoney = payDetail.RealPayMoney;

                        if (payDetail.PayType == "付款")
                        {
                            tenPayParam.BackState = payDetail.A1;
                            continue;
                        }
                        detail_data += string.Format("{0}^{1}|", payDetail.PayAccount, (realPayMoney * 100).ToString("F0"));
                    }


                    detail_data = detail_data.TrimEnd('|');



                    //1000|(帐号^退款金额)|



                    /*----------------------------------------------------------*/
                    //退款分账
                    tenPayParam.Bus_Args = detail_data;
                    //分账退款
                    TenPay tenPay = new TenPay();
                    result = tenPay.ClientSplitRollback(tenPayParam);
                    #endregion
                }
                else if (mOrder.PayWay == 14)
                {
                    #region 账户支付

                    try
                    {
                        result = bill.CreateVirtualRefundBill(mOrder, uEmployees, uCompany, out msg);

                        if (!result)
                        {
                            //退款失败记录日志
                            bill.CreateBillRefundFailedLog(uEmployees, mOrder.OrderId, msg);
                        }
                    }
                    catch (Exception)
                    {
                        msg = "退款异常!";
                    }

                    #endregion
                }
                else if (mOrder.PayWay == 15)
                {
                    // 收银 暂时不处理
                    result = true;
                }
            }
            catch (Exception)
            {
            }

            return(result);
        }