public override void ProcessNotify() { WxPayData notifyData = GetNotifyData(); setlog("transaction_id", notifyData.GetValue("transaction_id").ToString()); //检查支付结果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { setlog("transaction_id", "不存在"); //若transaction_id不存在,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml()); page.Response.Write(res.ToXml()); page.Response.End(); } else { #region 支付成功后处理订单信息============================================================= setlog("transaction_id", "存在"); Cms.BLL.C_order otBll = new Cms.BLL.C_order(); setlog("orderid", notifyData.GetValue("out_trade_no").ToString()); DataTable DT = otBll.GetList("order_num='" + notifyData.GetValue("out_trade_no").ToString() + "'").Tables[0]; if (DT != null && DT.Rows.Count > 0)//购物 { int orderId = Convert.ToInt32(DT.Rows[0]["id"].ToString()); Cms.Model.C_order ordertmp = otBll.GetModel(orderId); ordertmp.trade_no = notifyData.GetValue("transaction_id").ToString(); //ordertmp.notify_id = notifyData.GetValue("notify_id").ToString(); //ordertmp.pay_info = notifyData.GetValue("pay_info").ToString(); //orderEntity.price_sum = total_fee; ordertmp.payment_time = DateTime.Now; ordertmp.is_transaction = 0; ordertmp.order_status = 0; ordertmp.is_payment = 1; #region 修改积分============================ //setlog("修改积分", notifyData.GetValue("out_trade_no").ToString()); //Cms.BLL.C_user user_bll = new Cms.BLL.C_user(); //Cms.Model.C_user user_model = new Cms.BLL.C_user().GetModel(Convert.ToInt32(ordertmp.user_id)); //user_model.userallscore = user_model.userallscore + ordertmp.integral_sum; //user_model.userscore = user_model.userscore + ordertmp.integral_sum; //user_bll.Update(user_model); //Cms.BLL.C_integral_rec integral_BLL = new Cms.BLL.C_integral_rec(); //Cms.Model.C_integral_rec integral_model = new Cms.Model.C_integral_rec(); //DataTable dt = new Cms.BLL.C_ordersub().GetList("order_id=" + ordertmp.id).Tables[0]; //if (dt != null && dt.Rows.Count > 0) //{ // for (int i = 0; i < dt.Rows.Count; i++) // { // integral_model.article_id = Convert.ToInt32(dt.Rows[i]["article_id"].ToString()); // integral_model.user_id = Convert.ToInt32(dt.Rows[i]["user_id"].ToString()); // integral_model.usercard = user_model.usercard; // integral_model.openid = user_model.openid; // integral_model.numberid = dt.Rows[i]["id"].ToString(); // integral_model.scorename = "购买产品"; // integral_model.title = dt.Rows[i]["title"].ToString(); // integral_model.wescore = Convert.ToInt32(dt.Rows[i]["integral"].ToString() == "" ? "0" : dt.Rows[i]["integral"].ToString()) * Convert.ToInt32(dt.Rows[i]["quantity"].ToString()); // integral_model.quantity = Convert.ToInt32(dt.Rows[i]["quantity"].ToString()); // integral_model.type = 0; // integral_model.updateTime = DateTime.Now; // integral_BLL.Add(integral_model); // try // { // wxuser.UserSale wu = new wxuser.UserSale();//积分修改同步到ERP // wu = wxuser.getUserScore(user_model.usercard, user_model.openid, dt.Rows[i]["id"].ToString(), "购买产品", "+" + integral_model.wescore); // } // catch (Exception ex) // { // page.Response.Write(ex.Message); // page.Response.End(); // } // } //} #endregion #region 减库存加销量============================ DataTable dt = new Cms.BLL.C_ordersub().GetList("order_id=" + ordertmp.id).Tables[0]; if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { try { int productId = Convert.ToInt32(dt.Rows[i]["article_id"].ToString()); int quantity = Convert.ToInt32(dt.Rows[i]["quantity"].ToString()); Cms.Model.C_product product = new Cms.BLL.C_product().GetModel(productId); if (product.stock - quantity > 0) { product.stock = product.stock - quantity; product.sales = product.sales + quantity; new Cms.BLL.C_product().Update(product); } } catch (Exception ex) { page.Response.Write(ex.Message); page.Response.End(); } } } #endregion Cms.BLL.wx_log logBll = new Cms.BLL.wx_log(); Cms.Model.wx_log logModel = new Cms.Model.wx_log(); string payTmpType = "【微支付】"; string funName = payTmpType + "【微支付】 订单付款成功,处理订单" + " ProcessPaySuccess_wx "; bool ret = otBll.Update(ordertmp);//修改主表订单信息 if (!ret) { logModel.modelName = payTmpType; logModel.funName = funName; logModel.logsContent = "订单号【" + notifyData.GetValue("out_trade_no").ToString() + "】支付成功后处理数据失败"; logModel.logsType = 0; logBll.Add(logModel); } logModel.modelName = payTmpType; logModel.funName = funName; logModel.logsContent = "订单号【" + notifyData.GetValue("out_trade_no").ToString() + "】支付成功后,处理数据成功"; logModel.logsType = 1; logBll.Add(logModel); } else//充值 { DataTable dtRecharge = new Cms.BLL.C_user_recharge().GetList("orderNumber='" + notifyData.GetValue("out_trade_no").ToString() + "'").Tables[0]; if (dtRecharge != null && dtRecharge.Rows.Count > 0) { int orderId = Convert.ToInt32(dtRecharge.Rows[0]["id"].ToString()); Cms.Model.C_user_recharge orderRecharge = new Cms.BLL.C_user_recharge().GetModel(orderId); orderRecharge.isPay = 1; Cms.Model.C_user user = new Cms.BLL.C_user().GetModel(Convert.ToInt32(orderRecharge.userId)); user.userMoney = user.userMoney + orderRecharge.price; new Cms.BLL.C_user().Update(user); Cms.BLL.wx_log logBll = new Cms.BLL.wx_log(); Cms.Model.wx_log logModel = new Cms.Model.wx_log(); string payTmpType = "【微支付】"; string funName = payTmpType + "【微支付】 订单付款成功,处理订单" + " ProcessPaySuccess_wx "; bool ret = new Cms.BLL.C_user_recharge().Update(orderRecharge);//修改订单信息 if (!ret) { logModel.modelName = payTmpType; logModel.funName = funName; logModel.logsContent = "订单号【" + notifyData.GetValue("out_trade_no").ToString() + "】支付成功后处理数据失败"; logModel.logsType = 0; logBll.Add(logModel); } else { logModel.modelName = payTmpType; logModel.funName = funName; logModel.logsContent = "订单号【" + notifyData.GetValue("out_trade_no").ToString() + "】支付成功后,处理数据成功"; logModel.logsType = 1; logBll.Add(logModel); } } } #endregion } string transaction_id = notifyData.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id)) { setlog("return_code", "FAIL"); //若订单查询失败,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml()); page.Response.Write(res.ToXml()); page.Response.End(); } //查询订单成功 else { setlog("return_code", "SUCCESS"); WxPayData res = new WxPayData(); res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml()); page.Response.Write(res.ToXml()); page.Response.End(); setlog("SUCCESS", res.ToXml()); } }
/// <summary> /// 【微支付】 订单付款成功,处理订单:1将订单的状态改成付款完成; /// /// </summary> /// <param name="beforeFunName"></param> /// <param name="notify_id">通知id</param> /// <param name="out_trade_no">商户订单号</param> /// <param name="transaction_id">订单交易号</param> /// <param name="pay_info">支付结果</param> /// <param name="total_fee">付款金额(单位为分)</param> /// <param name="otid">订单临时表id</param> /// <returns>有错误则返回错误信息,正确,则返回空字符串</returns> public string ProcessPaySuccess_wx(string beforeFunName, string notify_id, string out_trade_no, string transaction_id, string pay_info, int total_fee, int otid, int wid) { string payTmpType = "【微支付】"; total_fee = total_fee / 100; Cms.BLL.C_order orderBll = new Cms.BLL.C_order(); string funName = payTmpType + beforeFunName + " ProcessPaySuccess_wx "; Cms.BLL.wx_log logBll = new Cms.BLL.wx_log(); Cms.Model.wx_log logModel = new Cms.Model.wx_log(); logModel.modelName = "微支付"; logModel.funName = funName; logModel.logsContent = "开始执行ProcessPaySuccess_wx方法[otid:" + otid + "]"; logBll.Add(logModel); try { #region 数据同步前 IList <Cms.Model.C_order> orderlist = orderBll.GetModelList("id=" + otid + " and order_num='" + out_trade_no + "'"); if (orderlist == null || orderlist.Count <= 0) { logModel.modelName = payTmpType; logModel.funName = funName; logModel.logsContent = "订单号【" + out_trade_no + "】订单号不存在"; logModel.logsType = 0; logBll.Add(logModel); return("订单号不存在"); } ////这个暂时不处理 //if (logBll.ExistsFlg((out_trade_no + otid))) //{ //如果已经处理过,则不再处理 // return ""; //} //logBll.AddFlg(wid, payTmpType, funName, (out_trade_no + otid));//加标志,防止重复提交 Cms.Model.C_order orderEntity = orderlist[0]; //if (orderEntity.price_sum > total_fee) //{ // return "付款的金额(" + total_fee + ")小于订单的预付款金额(" + orderEntity.price_sum + ")信息,直接退款"; //} orderEntity.notify_id = notify_id; orderEntity.trade_no = transaction_id; orderEntity.pay_info = pay_info; //orderEntity.price_sum = total_fee; orderEntity.payment_time = DateTime.Now; orderEntity.is_transaction = 0; orderEntity.order_status = 0; orderEntity.is_payment = 1; #region 修改积分============================ Cms.BLL.C_user user_bll = new Cms.BLL.C_user(); Cms.Model.C_user user_model = new Cms.BLL.C_user().GetModel(Convert.ToInt32(orderEntity.user_id)); user_model.userallscore = user_model.userallscore + orderEntity.integral_sum; user_model.userscore = user_model.userscore + orderEntity.integral_sum; user_bll.Update(user_model); Cms.BLL.C_integral_rec integral_BLL = new Cms.BLL.C_integral_rec(); Cms.Model.C_integral_rec integral_model = new Cms.Model.C_integral_rec(); DataTable dt = new Cms.BLL.C_ordersub().GetList("order_id=" + otid).Tables[0]; for (int i = 0; i < dt.Rows.Count; i++) { integral_model.article_id = Convert.ToInt32(dt.Rows[i]["article_id"].ToString()); integral_model.user_id = Convert.ToInt32(dt.Rows[i]["user_id"].ToString()); integral_model.usercard = user_model.usercard; integral_model.openid = user_model.openid; integral_model.numberid = dt.Rows[i]["id"].ToString(); integral_model.scorename = "购买产品"; integral_model.title = dt.Rows[i]["title"].ToString(); integral_model.wescore = Convert.ToInt32(dt.Rows[i]["integral"].ToString() == "" ? "0" : dt.Rows[i]["integral"].ToString()) * Convert.ToInt32(dt.Rows[i]["quantity"].ToString()); integral_model.quantity = Convert.ToInt32(dt.Rows[i]["quantity"].ToString()); integral_model.type = 0; integral_model.updateTime = DateTime.Now; integral_BLL.Add(integral_model); try { wxuser.UserSale wu = new wxuser.UserSale(); wu = wxuser.getUserScore(user_model.usercard, user_model.openid, dt.Rows[i]["id"].ToString(), "购买产品", "+" + integral_model.wescore); } catch (Exception ex) { } } #endregion ////判断是否需要立即发货 //if (orderEntity.express_status == 0) //{ // //立即发货 // FaHuoProc fahuo = new FaHuoProc(); // BLL.wx_payment_wxpay payBll = new BLL.wx_payment_wxpay(); // Model.wx_payment_wxpay paymentInfo = payBll.GetModelByWid(wid); // Dictionary<string, object> fahuoDict = fahuo.fahuomgr(paymentInfo, orderEntity); // string errcode = fahuoDict["errcode"].ToString(); // string errmsg = fahuoDict["errmsg"].ToString(); // orderEntity.fahuoCode = errcode; // orderEntity.fahuoMsg = errmsg; // if (errcode == "0") // { // orderEntity.express_status = 2; // orderEntity.express_time = DateTime.Now; // } // else // { // orderEntity.express_status = 1; // } //} bool ret = orderBll.Update(orderEntity); if (!ret) { logModel.modelName = payTmpType; logModel.funName = funName; logModel.logsContent = "订单号【" + out_trade_no + "】支付成功后处理数据失败"; logModel.logsType = 0; logBll.Add(logModel); return("订单号【" + out_trade_no + "】支付成功后处理数据失败"); } logModel.modelName = payTmpType; logModel.funName = funName; logModel.logsContent = "订单号【" + out_trade_no + "】支付成功后,处理数据成功"; logModel.logsType = 1; logBll.Add(logModel); return(""); #endregion } catch (Exception ex) { logModel.modelName = payTmpType; logModel.funName = funName; logModel.logsContent = "订单号【" + out_trade_no + "】支付成功后处理数据同步出现错误:" + ex.Message; logModel.logsType = 0; logBll.Add(logModel); return(null); } }
protected void Page_Load(object sender, EventArgs e) { //int wid = MyCommFun.RequestWid(); int wid = 0; Cms.BLL.wx_log logBll = new Cms.BLL.wx_log(); Cms.Model.wx_log logModel = new Cms.Model.wx_log(); logModel.modelName = "【微支付】微信预定"; logModel.funName = "notify_url Page_Load"; logModel.logsContent = "从微支付返回到notify_url.aspx页面"; logModel.logsType = 1; logBll.Add(logModel); // BLL.wx_payment_wxpay payBll = new BLL.wx_payment_wxpay(); ResponseHandler resHandler = new ResponseHandler(Context); resHandler.init(); //取wid string attach = resHandler.getParameter("attach"); string[] attachArr = attach.Split('|'); wid = MyCommFun.Str2Int(attachArr[0]); int otid = MyCommFun.Str2Int(attachArr[1]); //Model.wx_payment_wxpay paymentInfo = payBll.GetModelByWid(wid); // logBll.AddLog(wid, "【微支付】微信预定", "notify_url Page_Load", "取到wid=" + wid, 1); //resHandler.setKey(paymentInfo.partnerKey, paymentInfo.paySignKey);// TenpayUtil.key, TenpayUtil.appkey); resHandler.setKey("19ace89a7acd6e14ac3c66b2852f14d6", "YOFbXGzn0i8ZH8UlfqH7D7LpHHCXd4CxNqZgLffI8v58GSpxntqnVOx5zJFrsM2efT6XH89Nr0WDpfZjcfYCHD05uteWUfHq6BG8zuyTAe4uQ39yKOKqwYwl6yhgKueb"); //判断签名 if (resHandler.isTenpaySign()) { logModel.modelName = "【微支付】微信预定"; logModel.funName = "notify_url Page_Load"; logModel.logsContent = "resHandler.isTenpaySign()"; logModel.logsType = 1; logBll.Add(logModel); if (resHandler.isWXsign()) { //商户在收到后台通知后根据通知ID向财付通发起验证确认,采用后台系统调用交互模式 string notify_id = resHandler.getParameter("notify_id"); //取结果参数做业务处理 string out_trade_no = resHandler.getParameter("out_trade_no"); //财付通订单号 string transaction_id = resHandler.getParameter("transaction_id"); //金额,以分为单位 string total_fee = resHandler.getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee string discount = resHandler.getParameter("discount"); //支付结果 string trade_state = resHandler.getParameter("trade_state"); string pay_info = resHandler.getParameter("pay_info"); logModel.modelName = "【微支付】微信预定"; logModel.funName = "notify_url Page_Load"; logModel.logsContent = "notify_id=" + notify_id + " out_trade_no=" + out_trade_no + " transaction_id=" + transaction_id + " total_fee=" + total_fee + " trade_state=" + trade_state + " orderid=" + otid + " wid=" + wid + " pay_info=" + pay_info; logModel.logsType = 1; logBll.Add(logModel); //即时到账,支付成功 if ("0".Equals(trade_state)) { logModel.modelName = "【微支付】微信预定"; logModel.funName = "notify_url Page_Load"; logModel.logsContent = "支付成功了"; logModel.logsType = 1; logBll.Add(logModel); //------------------------------ //处理业务开始 //------------------------------ wxOrderTmpMgr Totbll = wxOrderTmpMgr.instance(); string ret = Totbll.ProcessPaySuccess_wx("notify_url", notify_id, out_trade_no, transaction_id, pay_info, MyCommFun.Str2Int(total_fee), otid, wid); ret = ret == "" ? "处理数据同步发送成功" : ret; logModel.modelName = "微信预定"; logModel.funName = "【微支付】notify_url Page_Load"; logModel.logsContent = ret; logModel.logsType = 1; logBll.Add(logModel); //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 //------------------------------ //处理业务完毕 //------------------------------ //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 Response.Write("success"); } else { logModel.modelName = "【微支付】微信预定"; logModel.funName = "notify_url Page_Load"; logModel.logsContent = "支付失败"; logModel.logsType = 1; logBll.Add(logModel); Response.Write("支付失败"); } //回复服务器处理成功 Response.Write("success"); } else {//SHA1签名失败 logModel.modelName = "微信预定"; logModel.funName = "【微支付】notify_url Page_Load"; logModel.logsContent = "fail -SHA1 failed"; logModel.logsType = 0; logBll.Add(logModel); Response.Write("fail -SHA1 failed"); Response.Write(resHandler.getDebugInfo()); } } else {//md5签名失败 logModel.modelName = "微信预定"; logModel.funName = "【微支付】notify_url Page_Load"; logModel.logsContent = "fail -md5 failed"; logModel.logsType = 0; logBll.Add(logModel); Response.Write("fail -md5 failed"); Response.Write(resHandler.getDebugInfo()); } }