private ActionResult CompleteOrder(string out_trade_no, string trade_no, OrderBuss obll) { DAO.OrderPay op = obll.GetOrderPay(out_trade_no); if (op != null) { if (op.PayState == "未支付") { op.PayState = "已支付"; if (op.PayType == 0) { op.Bank = "支付宝"; } op.Remark = string.Format("{1},由支付宝电子对账单更新{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, trade_no); //修改OrderPay log.Info("*********即将修改OrderPay**************"); bool r = obll.upDataOrderPay(op); log.Info("orderPay 更新结果:" + r); log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + " op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + trade_no); //支付成功修改订单状态 log.Info("*********即将修改Order状态**************"); DAO.Order order = obll.GetOrder(out_trade_no); //计算组合支付总金额==订单金额 bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice); log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price); if (r_vali_price) { bool r_oder = obll.upOrder(out_trade_no); log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder); } else { log.Info("订单:" + op.OrderId + " 修改状态失败,金额验证不通过"); return(Redirect(string.Format("/Order/Detail/{0}", out_trade_no))); } } } else { log.Info("OrderPay is Null"); return(Redirect(string.Format("/Order/Detail/{0}", out_trade_no))); } //打印页面 //orderpay 订单支付类型 0 正常订单 1 充值订单 if (op.OrderType == 0) { return(Redirect(string.Format("/Order/Detail/{0}", out_trade_no))); } else if (op.OrderType == 1) { return(Redirect("/pay/recharge_success.html")); } else { return(Redirect(string.Format("/Order/Detail/{0}", out_trade_no))); } }
//异步通知 public ActionResult autoreceive() { log.Info("**********************支付宝回调autoreceive**********************"); SortedDictionary <string, string> sPara = GetRequestPost(); log.Info("参数个数:" + sPara.Count); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.Verify(sPara, Request.Form["notify_id"], Request.Form["sign"]); log.Info("autoreceive是否支付宝发出的验证:" + verifyResult + "参数sPara:" + sPara + "参数sign:" + Request.Form["sign"]); if (verifyResult)//验证成功 { log.Info("autoreceive验证成功"); //商户订单号 string out_trade_no = Request.Form["out_trade_no"]; //支付宝交易号 string trade_no = Request.Form["trade_no"]; //交易状态 string trade_status = Request.Form["trade_status"]; log.Info("autoreceive商户订单号:" + out_trade_no + "支付宝交易号:" + trade_no + "支付宝交易状态:" + trade_status); try { OrderBuss obll = new OrderBuss(); if (trade_status == "TRADE_FINISHED") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 } if (trade_status == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。 DAO.OrderPay op = obll.GetOrderPay(out_trade_no); if (op.PayState == "未支付") { op.PayState = "已支付"; if (op.PayType == 0) { op.Bank = "支付宝"; } op.Remark = string.Format("{1},由支付宝电子对账单更新{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, trade_no); //修改OrderPay log.Info("*********即将修改OrderPay**************"); bool r = obll.upDataOrderPay(op); log.Info("orderPay 更新结果:" + r); log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + " op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + trade_no); //支付成功修改订单状态 log.Info("*********即将修改Order状态**************"); DAO.Order order = obll.GetOrder(out_trade_no); //计算组合支付总金额==订单金额 bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice); log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price); if (r_vali_price) { bool r_oder = obll.upOrder(out_trade_no); log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder); } } } else { Response.Write(trade_status); } Response.Write("success"); //请不要修改或删除 } catch (Exception exc) { Response.Write(exc.ToString()); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— } else//验证失败 { Response.Write("fail"); } Response.End(); } log.Info("**********************支付宝回调autoreceive结束**********************"); return(View()); }
// GET: /Alipay/ //同步通知 public ActionResult receive() { log.Info("**********************支付宝回调receive**********************"); //商户订单号 string out_trade_no = Request.QueryString["out_trade_no"]; SortedDictionary <string, string> sPara = GetRequestGet(); //日志 log.Info("商户订单号" + out_trade_no + ",参数个数:" + sPara.Count); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"]);//Request.Form["notify_id"], Request.Form["sign"] log.Info("是否支付宝发出的验证:" + verifyResult + "参数sPara:" + sPara.ToString() + "参数sign:" + Request.QueryString["sign"]); //日志 // Common.Log(out_trade_no + ",回调判断:" + verifyResult, Common.LogLevel.low, "微网站支付宝回调"); if (verifyResult)//验证成功 verifyResult { log.Info("支付宝返回验证成功"); //支付宝交易号 string trade_no = Request.QueryString["trade_no"]; //交易状态 string trade_status = Request.QueryString["trade_status"]; log.Info("支付宝交易号:" + trade_no + "支付宝交易状态:" + trade_status); OrderBuss obll = new OrderBuss(); if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS") { DAO.OrderPay op = obll.GetOrderPay(out_trade_no); if (op != null) { if (op.PayState == "未支付") { op.PayState = "已支付"; if (op.PayType == 0) { op.Bank = "支付宝"; } op.Remark = string.Format("{1},由支付宝电子对账单更新{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, trade_no); //修改OrderPay log.Info("*********即将修改OrderPay**************"); bool r = obll.upDataOrderPay(op); log.Info("orderPay 更新结果:" + r); log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + " op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + trade_no); //支付成功修改订单状态 log.Info("*********即将修改Order状态**************"); DAO.Order order = obll.GetOrder(out_trade_no); //计算组合支付总金额==订单金额 bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice); log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price); if (r_vali_price) { bool r_oder = obll.upOrder(out_trade_no); log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder); } } } else { log.Info("OrderPay is Null"); } //打印页面 //orderpay 订单支付类型 0 正常订单 1 充值订单 if (op.OrderType == 0) { return(Redirect(string.Format("/Order/Detail?oid={0}", out_trade_no))); } else if (op.OrderType == 1) { return(Redirect("/pay/recharge_success.html")); } } else { log.Info("支付宝交易状态未通过"); } } else //验证失败 { log.Info("支付宝返回验证失败"); Response.Write("验证失败"); } } else { Response.Write("无返回参数"); } log.Info("**********************支付宝回调receive结束**********************"); return(View()); }
public override void ProcessNotify() { WxPayData notifyData = GetNotifyData(); WxPayData res = new WxPayData(); if (notifyData.GetValue("return_code").ToString() == "SUCCESS") { log.Info("return_code:SUCCESS"); bool result = notifyData.GetValue("result_code").ToString() == "SUCCESS"?true:false; // out_trade_no if (result) { string out_trade_no = notifyData.GetValue("out_trade_no").ToString(); log.Info("获得订单号:" + out_trade_no); DAO.OrderPay op = obll.GetOrderPay(out_trade_no); if (op != null) { if (op.PayState == "未支付") { op.PayState = "已支付"; if (op.PayType == 0) { op.Bank = "微信支付"; } op.Remark = string.Format("{1},微信支付{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, out_trade_no); //修改OrderPay log.Info("*********即将修改OrderPay**************"); bool r = obll.upDataOrderPay(op); log.Info("orderPay 更新结果:" + r); log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + " op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + out_trade_no); //支付成功修改订单状态 log.Info("*********即将修改Order状态**************"); DAO.Order order = obll.GetOrder(out_trade_no); //计算组合支付总金额==订单金额 bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice); log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price); if (r_vali_price) { bool r_oder = obll.upOrder(out_trade_no); log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder); } } res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); log.Info("return_code :SUCCESS"); page.Response.Write(res.ToXml()); page.Response.End(); } else { res.SetValue("result_code", "FAIL"); res.SetValue("return_msg", "OrderPay is Null"); log.Error("支付结果失败result_code :FAil ==>OrderPay is Null"); page.Response.Write(res.ToXml()); page.Response.End(); } } else { res.SetValue("result_code", "FAIL"); res.SetValue("return_msg", "result_code fail"); log.Error("支付结果失败result_code :FAil ==>" + res.ToXml()); page.Response.Write(res.ToXml()); page.Response.End(); } } else { res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "retrun_code fail"); log.Error("return_code :FAil ==>" + res.ToXml()); page.Response.Write(res.ToXml()); page.Response.End(); } /** * //检查支付结果中transaction_id是否存在 * if (!notifyData.IsSet("transaction_id")) * { * //若transaction_id不存在,则立即返回结果给微信支付后台 * WxPayData res = new WxPayData(); * res.SetValue("return_code", "FAIL"); * res.SetValue("return_msg", "支付结果中微信订单号不存在"); * Log.Error("The Pay result is error : " + res.ToXml()); * page.Response.Write(res.ToXml()); * page.Response.End(); * } * * string transaction_id = notifyData.GetValue("transaction_id").ToString(); * * //查询订单,判断订单真实性 * if (!QueryOrder(transaction_id)) * { * //若订单查询失败,则立即返回结果给微信支付后台 * WxPayData res = new WxPayData(); * res.SetValue("return_code", "FAIL"); * res.SetValue("return_msg", "订单查询失败"); * Log.Error("Order query failure : " + res.ToXml()); * page.Response.Write(res.ToXml()); * page.Response.End(); * } * //查询订单成功 * else * { * WxPayData res = new WxPayData(); * res.SetValue("return_code", "SUCCESS"); * res.SetValue("return_msg", "OK"); * Log.Info("order query success : " + res.ToXml()); * page.Response.Write(res.ToXml()); * page.Response.End(); * }*****/ }
public void ProcessRequest(HttpContext context) { log.Debug("**********************支付宝回调autoreceive**********************"); Dictionary <string, string> sPara = GetRequestPost(); log.Debug("参数个数:" + sPara.Count); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.VerifyNotify(sPara, context.Request.Form["sign"]); log.Debug("autoreceive是否支付宝发出的验证:" + verifyResult + "参数sPara:" + sPara + "参数sign:" + context.Request.Form["sign"]); if (verifyResult)//验证成功 { log.Debug("autoreceive验证成功"); ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //解密(如果是RSA签名需要解密,如果是MD5签名则下面一行清注释掉) sPara = aliNotify.Decrypt(sPara); //XML解析notify_data数据 try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(sPara["notify_data"]); //商户订单号 string out_trade_no = xmlDoc.SelectSingleNode("/notify/out_trade_no").InnerText; //支付宝交易号 string trade_no = xmlDoc.SelectSingleNode("/notify/trade_no").InnerText; string trade_status = xmlDoc.SelectSingleNode("/notify/trade_status").InnerText; log.Debug("autoreceive商户订单号:" + out_trade_no + "支付宝交易号:" + trade_no + "支付宝交易状态:" + trade_status); OrderBuss obll = new OrderBuss(); if (trade_status == "TRADE_FINISHED") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 DAO.OrderPay op = obll.GetOrderPay(out_trade_no); if (op.PayState == "未支付") { op.PayState = "已支付"; if (op.PayType == 0) { op.Bank = "支付宝"; } op.Remark = string.Format("{1},由支付宝电子对账单更新{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, trade_no); //修改OrderPay log.Info("*********即将修改OrderPay**************"); bool r = obll.upDataOrderPay(op); log.Info("orderPay 更新结果:" + r); log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + " op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + trade_no); //支付成功修改订单状态 log.Info("*********即将修改Order状态**************"); DAO.Order order = obll.GetOrder(out_trade_no); //计算组合支付总金额==订单金额 bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice); log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price); if (r_vali_price) { bool r_oder = obll.upOrder(out_trade_no); log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder); } } context.Response.Write("success"); //请不要修改或删除 } if (trade_status == "TRADE_SUCCESS") { DAO.OrderPay op = obll.GetOrderPay(out_trade_no); //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。 if (op.PayState == "未支付") { op.PayState = "已支付"; if (op.PayType == 0) { op.Bank = "支付宝"; } op.Remark = string.Format("{1},由支付宝电子对账单更新{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, trade_no); //修改OrderPay log.Info("*********即将修改OrderPay**************"); bool r = obll.upDataOrderPay(op); log.Info("orderPay 更新结果:" + r); log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + " op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + trade_no); //支付成功修改订单状态 log.Info("*********即将修改Order状态**************"); DAO.Order order = obll.GetOrder(out_trade_no); //计算组合支付总金额==订单金额 bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice); log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price); if (r_vali_price) { bool r_oder = obll.upOrder(out_trade_no); log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder); } } context.Response.Write("success"); //请不要修改或删除 } else { context.Response.Write(trade_status); } } catch (Exception exc) { context.Response.Write(exc.ToString()); //MJZCake.Utility.Common.Log(exc.Message, MJZCake.Utility.Common.LogLevel.high, "mjz"); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { context.Response.Write("fail"); } context.Response.End(); } }