/// <summary> /// 获取申请退款XF系统的流水状态 /// </summary> /// <param name="cpySysID"></param> /// <param name="reBackID"></param> /// <param name="tradeNo"></param> /// <param name="reBackMoney"></param> /// <param name="outTradNo"></param> /// <param name="resMsg"></param> /// <returns></returns> public static bool ReBackOrderPayMoney(string cpySysID, string reBackID, string tradeNo, string reBackMoney, DateTime oTraderCreateTime, DateTime rebackOrderCreateTme, out string outTradNo, out string resMsg) { DSMT_TAE_ServiceSoapClient taeCilent = new DSMT_TAE_ServiceSoapClient(); GetRefundAccBalanceEntity getRefundAccBalanceEntity = new GetRefundAccBalanceEntity(); getRefundAccBalanceEntity.CpySysID = cpySysID; getRefundAccBalanceEntity.OrderNo = reBackID;//退回的订单编号 getRefundAccBalanceEntity.TradeNo = tradeNo; getRefundAccBalanceEntity.TradeMoney = reBackMoney; getRefundAccBalanceEntity.TradeTime = Convert.ToString(oTraderCreateTime); getRefundAccBalanceEntity.OrderTime = Convert.ToString(rebackOrderCreateTme); VerifyHelper verifyHelper = new VerifyHelper(); verifyHelper.EncryptPmtEntity(getRefundAccBalanceEntity); outTradNo = string.Empty; resMsg = string.Empty; try { BackRefundAccBalanceEntity backRefundAccBalanceEntity = taeCilent.RefundAccBalance(getRefundAccBalanceEntity); if (verifyHelper.CheckPmtSign(ref backRefundAccBalanceEntity))//校验并解密 { outTradNo = backRefundAccBalanceEntity.TradeNo; switch (backRefundAccBalanceEntity.TradeStatus) { case "10": return(true); case "20": return(true); case "30": resMsg = "XF系统返回交易信息不存在"; break; case "40": resMsg = "XF系统返回退款金额异常"; break; case "50": resMsg = "XF系统执行退款失败"; break; default: resMsg = "XF系统返回意外的内容"; break; } } } catch (Exception e) { ToolHelper.WriteLogInfoToLocalText(e.Message); } return(false); }
protected void Page_Load(object sender, EventArgs e) { if (Request.HttpMethod.ToLower() == "get")//获取用户端的传输方式(全转化为小写)是否是get传值 { string openid = Convert.ToString(HttpContext.Current.Session[WebLoginHelper.SESSION_OPENID]); if (!string.IsNullOrEmpty(openid)) { DSMT_TAE_ServiceSoapClient pmtCilent = new DSMT_TAE_ServiceSoapClient(); GetQueryUserInfoEntity userInfoEntity = new GetQueryUserInfoEntity(); try { userInfoEntity.OpenID = new DESHelper().Decrypt(openid); new VerifyHelper().EncryptPmtEntity(userInfoEntity); BackQueryUserInfoEntity backUserInfo = pmtCilent.QueryUserInfo(userInfoEntity); new VerifyHelper().CheckPmtSign(ref backUserInfo); uOpenID.InnerHtml = openid;//将加密后的openID写入隐藏控件 if (backUserInfo != null) { if (!string.IsNullOrEmpty(backUserInfo.UserNo) && !string.IsNullOrEmpty(backUserInfo.UserPhone))//判断职员编号是否为空//并且手机号码不为空 { string telphoneNo = backUserInfo.UserPhone; string telphoneEnc = new DESHelper().Encrypt(telphoneNo); telephoneNo.Value = WebToolHelper.HiddenTelephoneNo(telphoneNo); //"18758305045";//替换*号符 telephoneUserName.InnerHtml = WebToolHelper.HiddenTelephoneUserName(backUserInfo.RealName); telephoneNo.Attributes.Add("disabled", "disabled"); telephoneNo.Attributes.Add("mydata", telphoneEnc); BindingInfo bindingInfo = new BindingInfo(); bindingInfo.CpySysID = backUserInfo.CpySysID; bindingInfo.CpyName = backUserInfo.CpyName; bindingInfo.SimpleName = backUserInfo.SimpleName; bindingInfo.RealName = backUserInfo.RealName; bindingInfo.UserGender = backUserInfo.UserGender; bindingInfo.UserNo = backUserInfo.UserNo; string jsonUserInfo = new JavaScriptSerializer().Serialize(bindingInfo); telephoneUserName.Attributes.Add("mydata", new DESHelper().Encrypt(jsonUserInfo)); } } } catch (Exception es) { FileHelper.logger.Error(Convert.ToString(es)); Response.Redirect("/web/mall_Index.aspx?", false); } } else { FileHelper.logger.Info("获取COOKIE的openID失败"); } } }
/// <summary> /// 调用查询用户余额的XF接口返回用户可用余额 /// </summary> /// <param name="userInfo">用户信息实体类</param> /// <returns></returns> public static string GetUserCardBalanceInfo(DB.Model.M_Users userInfo) { DSMT_TAE_ServiceSoapClient taeCilent = new DSMT_TAE_ServiceSoapClient(); GetQueryAccBalanceEntity balanceEntity = new GetQueryAccBalanceEntity(); balanceEntity.OpenID = userInfo.OpenID; string outMoeny = "0"; new VerifyHelper().EncryptPmtEntity(balanceEntity);//加密加签 try { BackQueryAccBalanceEntity backBalanceEntity = taeCilent.QueryAccBalance(balanceEntity); if (new VerifyHelper().CheckPmtSign(ref backBalanceEntity)) //解密解签 { //AccMoeny:个人余额 ; AccSubsidy:补贴余额 ; AccStatus:账户状态10-未启用20-补贴余额消费30-个人余额消费40-补贴和个人余额消费 if ((!string.IsNullOrEmpty(backBalanceEntity.CpySysID) && backBalanceEntity.CpySysID != userInfo.CpySysID) || (!string.IsNullOrEmpty(backBalanceEntity.SimpleName) && backBalanceEntity.SimpleName != userInfo.SimpleName)) //如果返回的用户公司信息与当前用户公司信息不一致,更新用户信息 { userInfo.CpySysID = backBalanceEntity.CpySysID; userInfo.CpyName = backBalanceEntity.CpyName; userInfo.SimpleName = backBalanceEntity.SimpleName; new DB.BLL.MY_Bll(DBEnum.Master).UpdateModel <DB.Model.M_Users>(" UserID=@_UserID ", new { _UserID = userInfo.UserID, CpySysID = userInfo.CpySysID, CpyName = userInfo.CpyName, SimpleName = userInfo.SimpleName }); HttpContext.Current.Session[WebLoginHelper.SESSION_ADMIN] = userInfo;//更新session } switch (backBalanceEntity.AccStatus) { case "20": outMoeny = backBalanceEntity.AccSubsidy; break; case "30": outMoeny = backBalanceEntity.AccMoney; break; case "40": outMoeny = (Convert.ToDouble(backBalanceEntity.AccSubsidy) + Convert.ToDouble(backBalanceEntity.AccMoney)).ToString(); break; default: break; } } return(outMoeny); } catch { return(outMoeny); } }
/// <summary> /// 调用XF接口获取开通商城消费的所有公司信息 /// </summary> /// <returns></returns> public static string GetCpyInfo() { string resWrite = "UNLOGIN"; DSMT_TAE_ServiceSoapClient taeCilent = new DSMT_TAE_ServiceSoapClient(); GetQueryCpyInfoEntity queryCpyInfoEntity = new GetQueryCpyInfoEntity(); VerifyHelper verifyHelper = new VerifyHelper(); queryCpyInfoEntity.GetNo = Guid.NewGuid().ToString(); verifyHelper.EncryptPmtEntity(queryCpyInfoEntity); try { BackQueryCpyInfoEntity backQueryCpyInfoEntity = taeCilent.QueryCpyInfo(queryCpyInfoEntity); if (verifyHelper.CheckPmtSign(ref backQueryCpyInfoEntity)) { resWrite = backQueryCpyInfoEntity.CpyInfo; } }catch {} return(resWrite); }
/// <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); }
/// <summary> /// 将订单的付款金额推送给XF系统进行资金结算 /// </summary> /// <param name="pushType">推送类型</param> /// <param name="pushOrderSn">推送订单编号</param> /// <param name="pushOrderAmount">推送订单总金额</param> /// <param name="pushFeeAmount">推送订单运费金额</param> /// <param name="resPayInfo">返回的支付信息</param> /// <returns></returns> public static bool SeacherThisOrderTrade(string orderID, out string resPayInfo) { resPayInfo = string.Empty; DSMT_TAE_ServiceSoapClient taeCilent = new DSMT_TAE_ServiceSoapClient(); GetQueryOrderStatusEntity getQueryOrderStatusEntity = new GetQueryOrderStatusEntity(); BackQueryOrderStatusEntity backQueryOrderStatusEntity = new BackQueryOrderStatusEntity(); VerifyHelper verifyHelper = new VerifyHelper(); DB.Model.M_OrderInfo orderInfo = new DB.BLL.MB_Bll(DBEnum.Slave).GetModel <DB.Model.M_OrderInfo>(" OrderID=@_OrderID ", new { _OrderID = orderID }); DB.Model.M_Payment payMentInfo = new DB.BLL.MB_Bll(DBEnum.Slave).GetModel <DB.Model.M_Payment>(" PayID=@_PayID ", new { _PayID = 20 }); if (orderInfo != null && payMentInfo != null) { getQueryOrderStatusEntity.OpenID = orderInfo.OpenID; getQueryOrderStatusEntity.OrderNo = orderInfo.OrderSn; getQueryOrderStatusEntity.UnifyOrderNo = orderInfo.OrderUnifySn; getQueryOrderStatusEntity.OrderTime = Convert.ToString(orderInfo.AddTime); string resMsg = string.Empty; string orderSn = string.Empty; verifyHelper.EncryptPmtEntity(getQueryOrderStatusEntity); try { backQueryOrderStatusEntity = taeCilent.QueryOrderStatus(getQueryOrderStatusEntity);//调xf接口 if (verifyHelper.CheckPmtSign(ref backQueryOrderStatusEntity)) { /// 交易状态10-成功20-失败30-待同步40-交易信息不存在 if (backQueryOrderStatusEntity != null && !string.IsNullOrEmpty(backQueryOrderStatusEntity.TradeStatus) && !string.IsNullOrEmpty(backQueryOrderStatusEntity.TradeNo))//XF系统返回的数据不为空,并且状态信息不为空 { if (backQueryOrderStatusEntity.TradeStatus == "10" || backQueryOrderStatusEntity.TradeStatus == "20" || backQueryOrderStatusEntity.TradeStatus == "30") { orderSn = (backQueryOrderStatusEntity.IsUnify == "0")? orderInfo.OrderSn:orderSn; if (new DB.BLL.MB_Bll(DBEnum.Master).UpdateOrderInfoFromXFPayment(orderInfo.OrderUnifySn, orderSn, ToolHelper.ConventToDecimal(backQueryOrderStatusEntity.TradeMoney, 9999), backQueryOrderStatusEntity.TradeNo, ToolHelper.ConventToDateTime(backQueryOrderStatusEntity.TradeTime, DateTime.Now), payMentInfo, backQueryOrderStatusEntity.CpySysID, backQueryOrderStatusEntity.CpyName, out resMsg)) { //WeChatAPI.SendMsg("异常订单处理成功", "您有一笔异常订单已被成功处理,请关注最新的订单状态",orderInfo.OpenID); return(true); } else { resPayInfo = resMsg; } } else { resPayInfo = "交易信息不存在"; } } else { resPayInfo = "XF系统返回数据出错,请稍后再试"; } } else//验签失败 { resPayInfo = "从XF系统返回的数据通讯错误,签名验证失败"; } } catch (Exception e) { resPayInfo = "与XF系统的通讯出错,返回错误信息:" + e.Message; } } else { resPayInfo = "获取相应的数据出错"; } return(false); }
/// <summary> /// 将订单的付款金额推送给XF系统进行资金结算 /// </summary> /// <param name="pushType">推送类型</param> /// <param name="pushOrderSn">推送订单编号</param> /// <param name="pushOrderAmount">推送订单总金额</param> /// <param name="pushFeeAmount">推送订单运费金额</param> /// <param name="resPayInfo">返回的支付信息</param> /// <returns></returns> public static bool SetUserOrderToPayment(string pushType, string pushOrderSn, decimal pushOrderAmount, DateTime orderCreateTime, out string resPayInfo) { resPayInfo = string.Empty; DSMT_TAE_ServiceSoapClient taeCilent = new DSMT_TAE_ServiceSoapClient(); GetPayAccBalanceEntity payAccBanlanceEntity = new GetPayAccBalanceEntity(); BackPayAccBalanceEntity backPayAccBanlanEntity = new BackPayAccBalanceEntity(); VerifyHelper verifyHelper = new VerifyHelper(); payAccBanlanceEntity.OpenID = WebLoginHelper.GetUserOpenID(); payAccBanlanceEntity.UserPhone = WebLoginHelper.GetUserPhone(); payAccBanlanceEntity.OrderMoney = pushOrderAmount.ToString(); payAccBanlanceEntity.OrderTime = Convert.ToString(orderCreateTime); string logInfo = string.Empty; string temp = string.Empty; if (pushType == "orderSn") { string orderUnifySn = new SQLEntityHelper().GetOrderUnifySnByOrderSn(pushOrderSn); if (!string.IsNullOrEmpty(orderUnifySn)) { payAccBanlanceEntity.UnifyOrderNo = orderUnifySn; payAccBanlanceEntity.OrderNo = pushOrderSn; } else { resPayInfo = "系统忙,请稍后再试"; return(false); } } else if (pushType == "unifySn") { payAccBanlanceEntity.UnifyOrderNo = pushOrderSn; } else { resPayInfo = "系统忙,请稍后再试"; return(false); } verifyHelper.EncryptPmtEntity(payAccBanlanceEntity); try { backPayAccBanlanEntity = taeCilent.PayAccBalance(payAccBanlanceEntity);//调xf接口 if (verifyHelper.CheckPmtSign(ref backPayAccBanlanEntity)) { /// 交易状态10-支付成功20-已支付完成30-账户信息不存在40-账户不可用50-手机号不一致60-账户余额不足70-支付失败 if (backPayAccBanlanEntity != null && !string.IsNullOrEmpty(backPayAccBanlanEntity.TradeStatus))//XF系统返回的数据不为空,并且状态信息不为空 { switch (backPayAccBanlanEntity.TradeStatus) { case "10": if (UpdateOrderStatusByXFResultToPayment(backPayAccBanlanEntity, out temp)) //更新订单状态信息为付款中并生成流水号 { return(true); //执行数据库操作成功,直接返回true } else { resPayInfo = "支付错误,请联系客服"; //返回给外面resWrite的 logInfo = temp; new TryCatchErrHelper().Handler1001Error(pushType, pushOrderSn, logInfo); //执行错误代码1001的方法 break; } case "20": resPayInfo = "您已完成支付申请,请联系客服确认支付结果"; logInfo = "支付错误,系统检测到该笔订单已被XF系统支付,但当前订单状态仍可支付"; new TryCatchErrHelper().Handler1001Error(pushType, pushOrderSn, logInfo); //执行错误代码1001的方法 break; case "30": resPayInfo = "非法的操作,账户信息不存在"; break; case "40": resPayInfo = "非法的操作,此账户已被冻结"; break; case "50": resPayInfo = "非法的操作,系统检测到当前手机号与消费系统预留的手机号不一致"; break; case "60": resPayInfo = "支付失败,账户余额不足"; break; case "70": resPayInfo = "支付失败,贵公司规定该时段内不允许商城消费"; break; case "80": resPayInfo = "支付失败,请重新支付"; break; default: resPayInfo = "支付失败"; break; } } else { resPayInfo = "结算中心资金结算错误,请联系客服"; logInfo = "从XF系统返回的数据为空,或者返回的流水号为空,订单编号:" + pushOrderSn + ",推送方式:" + pushType; new TryCatchErrHelper().Handler1001Error(pushType, pushOrderSn, logInfo);//执行错误代码1001的方法 } } else //验签失败 { resPayInfo = "与结算中心通讯错误,请联系客服"; logInfo = "从XF系统返回的数据进行签名验证失败"; new TryCatchErrHelper().Handler1001Error(pushType, pushOrderSn, logInfo);//执行错误代码1001的方法 } } catch (Exception e) { ToolHelper.WriteLogInfoToLocalText("推送类型:" + pushType + ",订单编号:" + pushOrderSn + ",与XF系统资金结算出错,错误信息:" + e.Message + ",自定义错误信息" + logInfo); } return(false); }
/// <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); } } } } }