/// <summary> /// 支付宝回调 /// </summary> /// <returns></returns> public ActionResult OrderTrade() { bool flag = false; string error = string.Empty; Dictionary <string, string> sPara = GetRequestGet(); string out_trade_no = string.Empty; int hotelId = 0; if (sPara.Count > 0)//判断是否有带返回参数 { WayAlipay.Alipay.Notify aliNotify = new WayAlipay.Alipay.Notify(); bool verifyResult = aliNotify.VerifyReturn(sPara, Request.QueryString["sign"]); if (verifyResult)//验证成功 { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表 //商户订单号 out_trade_no = Request.QueryString["out_trade_no"]; //支付宝交易号 string trade_no = Request.QueryString["trade_no"]; //交易状态 string result = Request.QueryString["result"]; //判断是否在商户网站中已经做过了这次通知返回的处理 //如果没有做过处理,那么执行商户的业务程序 //如果有做过处理,那么不执行商户的业务程序 //打印页面 //日志记录 logger.ErrorFormat("wap支付同步回调信息{0}-{1}", out_trade_no, Request.Url); if (result == "success") { flag = OrderHandle(false, out_trade_no, trade_no, "TRADE_FINISHED", "0", out hotelId); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { error = "验证失败"; } } else { error = "无返回参数"; } if (flag) { error = "success"; } Session["alipay_error"] = error; return(RedirectToAction("AliPaySuccess", new { hotelId = hotelId, code = (flag == true ? "0000" : "1000"), key = HotelHotel.Utility.Utility.GetGuidString(), d = out_trade_no.Replace(Prefix, "") })); }
public string Notify() { bool flag = false; string error = string.Empty; try { logger.ErrorFormat("wap支付异步回调"); int hotelId = 0; Dictionary <string, string> sPara = GetRequestPost(); if (sPara.Count > 0)//判断是否有带返回参数 { WayAlipay.Alipay.Notify aliNotify = new WayAlipay.Alipay.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; //日志记录 logger.ErrorFormat("wap支付异步回调信息{0}-{1}", out_trade_no, xmlDoc.InnerXml.ToString()); if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 flag = OrderHandle(true, out_trade_no, trade_no, trade_status, xmlDoc.SelectSingleNode("/notify/total_fee").InnerText, out hotelId); } else { error = trade_status; } } catch (Exception exc) { flag = false; logger.ErrorFormat("wap支付异步回调异常-{0}", exc.Message.ToString()); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { error = "fail"; } } else { error = "无通知参数"; } } catch (Exception ex) { flag = false; logger.ErrorFormat("wap支付异步回调异常-{0}", ex.Message.ToString()); } if (flag) { error = "success"; } string result = flag == true ? "success" : "fail"; return(result); }