示例#1
0
 /// <summary>
 /// 管理员进行手动同步流水状态
 /// </summary>
 /// <param name="tradeSysID"></param>
 /// <param name="resMsg"></param>
 /// <returns></returns>
 public static bool GetOrderInfoPaymentStatusSync(string tradeSysID, out string resMsg)
 {
     resMsg = string.Empty;
     DB.Model.M_OrderTrade orderTradeInfo = new DB.BLL.MY_Bll(DBEnum.Slave).GetModel <DB.Model.M_OrderTrade>(" TradeSysID=@_TradeSysID ", new { _TradeSysID = tradeSysID });
     if (orderTradeInfo != null)
     {
         DSMT_TAE_ServiceSoapClient taeCilent = new DSMT_TAE_ServiceSoapClient();
         GetQueryTradeStatusEntity  queryTradeStatusEntity = null;
         VerifyHelper verifyHelper = new VerifyHelper();
         BackQueryTradeStatusEntity backQueryTradeStatusEntity = null;
         DateTime nowTime   = DateTime.Now;
         string   outOpenID = string.Empty;
         queryTradeStatusEntity     = new GetQueryTradeStatusEntity();                                        //初始化
         backQueryTradeStatusEntity = null;
         if (!string.IsNullOrEmpty(orderTradeInfo.TradeNo) && !string.IsNullOrEmpty(orderTradeInfo.CpySysID)) //判断流水号公司ID都存在的情况下调用XF接口,并且流水号的创建时间超时10分钟
         {
             queryTradeStatusEntity.CpySysID  = orderTradeInfo.CpySysID;
             queryTradeStatusEntity.TradeNo   = orderTradeInfo.TradeNo;
             queryTradeStatusEntity.TradeTime = Convert.ToString(orderTradeInfo.PayTime); //流水时间是XF系统返回给我的时间
             verifyHelper.EncryptPmtEntity(queryTradeStatusEntity);                       //加密加签
             try
             {
                 backQueryTradeStatusEntity = taeCilent.QueryTradeStatus(queryTradeStatusEntity); //调用XF接口
             }
             catch (Exception e)                                                                  //通讯异常
             {
                 resMsg = "与XF系统扣款状态同步查询出错,错误信息:" + e.Message;
             }
             if (verifyHelper.CheckPmtSign(ref backQueryTradeStatusEntity))                                                //尝试解签,解签失败的话不执行任何代码
             {
                 if (backQueryTradeStatusEntity.TradeType == "0")                                                          //交易类型是0
                 {
                     if (backQueryTradeStatusEntity.TradeStatus == "10" || backQueryTradeStatusEntity.TradeStatus == "20") //交易状态10-已完成20-已撤销(余额不足付款失败?)30-待同步40-交易信息不存在
                     {
                         if (new DB.BLL.MY_Bll(DBEnum.Master).UpdateOrderStatusByXFPaymentToComfirm(ToolHelper.ConventToDecimal(backQueryTradeStatusEntity.TradeMoney, 999), orderTradeInfo.TradeSysID, backQueryTradeStatusEntity.TradeStatus, out outOpenID))
                         {
                             //WeChatAPI.SendMsg("付款审核成功", "您有一笔订单流水付款审核已通过,正等待仓库发货", outOpenID);
                             return(true);
                         }
                     }
                     else if (backQueryTradeStatusEntity.TradeStatus == "40")
                     {
                         resMsg = "与XF系统扣款状态同步查询出错,错误信息:XF系统该笔流水号信息不存在";
                     }
                     else if (backQueryTradeStatusEntity.TradeStatus == "30")
                     {
                         resMsg = "XF系统尚未同步,扣款尚未完成";
                     }
                 }
                 else
                 {
                     resMsg = "XF系统返回的数据有误,返回的流水类型是退款流水";
                 }
             }
             else
             {
                 resMsg = "XF系统返回的解签数据出错";
             }
         }
         else
         {
             resMsg = "该流水号数据存在问题";
         }
     }
     else
     {
         resMsg = "该流水号数据存在问题";
     }
     return(false);
 }
示例#2
0
        /// <summary>
        /// 调用XF系统接口进行交易退款状态同步查询
        /// </summary>
        public static void GetReBackPayAccStatusSync()
        {
            List <DSMTMALL.DB.Model.M_ReBackTrade> orderTradeList = new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Slave).GetModelList <DSMTMALL.DB.Model.M_ReBackTrade>(" ComfirmStatus=10 ORDER BY CreateTime ASC LIMIT 50 ", null);

            if (orderTradeList != null && orderTradeList.Count > 0)
            {
                DSMT_TAE_ServiceSoapClient taeCilent = new DSMT_TAE_ServiceSoapClient();
                GetQueryTradeStatusEntity  queryTradeStatusEntity = null;
                VerifyHelper verifyHelper = new VerifyHelper();
                BackQueryTradeStatusEntity backQueryTradeStatusEntity = null;
                DateTime nowTime   = DateTime.Now;
                string   outOpenID = string.Empty;
                foreach (var item in orderTradeList)
                {
                    queryTradeStatusEntity     = new GetQueryTradeStatusEntity();                                                                //初始化
                    backQueryTradeStatusEntity = null;
                    if (!string.IsNullOrEmpty(item.TradeNo) && !string.IsNullOrEmpty(item.CpySysID) && item.CreateTime.AddMinutes(10) < nowTime) //判断流水号公司ID都存在的情况下调用XF接口,并且流水号的创建时间超时10分钟
                    {
                        if (item.CreateTime.AddMinutes(360) > nowTime)                                                                           //如果超过6个小时,XF系统还未同步完成,记录异常
                        {
                            queryTradeStatusEntity.CpySysID = item.CpySysID;
                            queryTradeStatusEntity.TradeNo  = item.ReBackTradeNo;
                            verifyHelper.EncryptPmtEntity(queryTradeStatusEntity);//加密加签
                            try
                            {
                                backQueryTradeStatusEntity = taeCilent.QueryTradeStatus(queryTradeStatusEntity); //调用XF接口
                            }
                            catch (Exception e)                                                                  //通讯异常
                            {
                                ToolHelper.WriteTxt(logPathErr, DateTime.Now + "退款流水号:" + item.ReBackTradeNo + "与XF系统退款状态同步查询出错,错误信息:" + e.Message, false);
                                continue;
                            }
                            if (verifyHelper.CheckPmtSign(ref backQueryTradeStatusEntity))//尝试解签,解签失败的话不执行任何代码
                            {
                                if (backQueryTradeStatusEntity.TradeType == "1")
                                {
                                    if (backQueryTradeStatusEntity.TradeStatus == "10" || backQueryTradeStatusEntity.TradeStatus == "20") //交易状态10-已完成20-已撤销(即失败)30-待同步40-交易信息不存在
                                    {
                                        if (new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Master).UpdateReBackPayAccByXFPaymentToComfirm(ToolHelper.ConventToDecimal(backQueryTradeStatusEntity.TradeMoney, 999), item.ReBackTradeSysID, backQueryTradeStatusEntity.TradeStatus, out outOpenID))
                                        {
                                            WeChatAPI.SendMsg("退款资金到账通知", "您有一笔退款金额已通过原支付方式退还至您的账户,请注意查收", outOpenID);
                                        }
                                    }
                                    else if (backQueryTradeStatusEntity.TradeStatus == "40")
                                    {
                                        string resMsg = DateTime.Now + "退款流水号:" + item.ReBackTradeNo + "与XF系统退款状态同步查询出错,错误信息:XF系统该笔流水号信息不存在";
                                        new DSMTMALL.DB.BLL.MB_Bll(DBEnum.Master).RecordErrInfoNote("同步程序查询XF系统退款状态发现异常", resMsg);
                                        new TryCatchErrHelper().HandlerReBackTradeError(item.ReBackTradeSysID);
                                        ToolHelper.WriteTxt(logPathErr, resMsg, false);
                                    }//30就不做任何处理
                                }
                            }
                        }
                        else
                        {
                            new DSMTMALL.DB.BLL.MB_Bll(DBEnum.Master).RecordErrInfoNote("同步程序查询XF系统退款状态发现异常", "退款流水号:" + item.TradeNo + "与XF系统退款状态同步查询已过6个小时,XF系统仍未同步完成");
                            new TryCatchErrHelper().HandlerReBackTradeError(item.ReBackTradeSysID);
                        }
                    }
                }
            }
        }