public void AddPayLog(bool isNotify) { PayLog log = new PayLog(); log.ID = DataHelper.GetSystemID(); log.OrderNo = Request.QueryString["out_trade_no"]; if (isNotify) { log.Message = Request.Form.ToString(); } else { log.Message = Request.Url.ToString();; } log.LogTime = DateTime.Now; PayLogService ps = new PayLogService(); ps.Add(log); }
/// <summary> /// 接收code参数 /// </summary> /// <returns></returns> public ActionResult ResponseParam() { try { var code = Request["code"]; if (code != null) { Session["code"] = code; } return(Redirect("/Tenpay/WXPay/" + Session["orderid"])); } catch (Exception e) { PayLog model = new PayLog(); model.ID = FCake.Core.Common.DataHelper.GetSystemID(); model.LogTime = DateTime.Now; model.Message = "error:" + e.Message; log.Add(model); return(Redirect("/")); } }
public ActionResult AlipayNotify() { try { AddPayLog(true); } catch (Exception e) { PayLogService ps = new PayLogService(); PayLog pl = new PayLog(); pl = new PayLog(); pl.ID = DataHelper.GetSystemID(); pl.LogTime = DateTime.Now; pl.Message = e.Message; ps.Add(pl); } Dictionary <string, string> sPara = GetRequestPost(); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.VerifyNotify(sPara, Request.Form["sign"]); if (verifyResult)//验证成功 { //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //解密(如果是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; if (trade_status == "TRADE_FINISHED") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 psv.FinishOrder(out_trade_no, trade_no, FeeType.ALiPay); //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 return(Content("success")); //请不要修改或删除 } else if (trade_status == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 psv.FinishOrder(out_trade_no, trade_no, FeeType.ALiPay); //注意: //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。 return(Content("success")); //请不要修改或删除 } else { return(Content(trade_status)); } } catch (Exception exc) { return(Content(exc.ToString())); } } else//验证失败 { return(Content("fail")); } } else { return(Content("无通知参数")); } }
/// <summary> /// 微信的异步支付返回 /// </summary> /// <returns></returns> public ActionResult WetChatNotify() { try { //PayLog notity1 = new PayLog(); //notity1.ID = FCake.Core.Common.DataHelper.GetSystemID(); //notity1.LogTime = DateTime.Now; //notity1.Message = "notity:返回结果通知开始执行"; //log.Add(notity1); //需验证支付结果 WxPayData notifyData = GetNotifyData(); PayLog notity2 = new PayLog(); notity2.ID = FCake.Core.Common.DataHelper.GetSystemID(); notity2.LogTime = DateTime.Now; notity2.Message = "notity2接收到的数据:" + notifyData.ToJson().ToString(); log.Add(notity2); WxPayData res = new WxPayData(); //检查支付结果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); PayLog notity3 = new PayLog(); notity3.ID = FCake.Core.Common.DataHelper.GetSystemID(); notity3.LogTime = DateTime.Now; notity3.Message = "notity3接收到的数据:没有transaction_id"; log.Add(notity3); } string transaction_id = notifyData.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id)) { //若订单查询失败,则立即返回结果给微信支付后台 res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); } //查询订单成功 else { res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); var orderId = notifyData.GetValue("out_trade_no").ToString(); PayLog notity4 = new PayLog(); notity4.ID = FCake.Core.Common.DataHelper.GetSystemID(); notity4.LogTime = DateTime.Now; notity4.Message = "notity4接收到的out_trade_no数据:" + orderId; log.Add(notity4); var preInfo = new PrePayInfoService().GetPrePayByPrePayNo(orderId); var order = psv.GetOrderByOrderNo(preInfo.OrderNo);//获取订单信息 if (order.Status == OrderStatus.NotPay) { PayLog notity5 = new PayLog(); notity5.ID = FCake.Core.Common.DataHelper.GetSystemID(); notity5.LogTime = DateTime.Now; notity5.Message = "notity5开始修改" + order.No + "订单状态:"; log.Add(notity5); psv.FinishOrder(order.No, transaction_id, FeeType.WXPay); } } return(Content(res.ToString())); } catch (Exception e) { PayLog notity99 = new PayLog(); notity99.ID = FCake.Core.Common.DataHelper.GetSystemID(); notity99.LogTime = DateTime.Now; notity99.Message = "回调发生异常" + e.Message; log.Add(notity99); return(Content("error")); } }